首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pushd popd全局目录堆栈?

pushd popd全局目录堆栈?
EN

Stack Overflow用户
提问于 2012-03-29 06:26:42
回答 2查看 899关注 0票数 5

我不知道是否有有效的方法来做到这一点。但是,我一直想看看这是否可能。

我知道pushd、popd和dirs对于很多事情都很有用,比如在你最近访问过的目录之间进行复制。

但是,有没有一种方法可以保持全局堆栈?因此,如果我在一个终端中推送某些东西(使用push d),它会反映到另一个终端中(可能只有登录会话中的终端)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-29 06:50:38

您应该能够通过一对shell函数和一个临时文件来做到这一点。

您的临时文件将被命名为类似于'/home/me/.directory_stack‘的名称,并且只包含一个目录列表:

代码语言:javascript
复制
/home/me
/etc
/var/log

您的'push_directory‘函数将简单地将当前目录添加到列表中。'pop_directory‘函数将从列表中拉出最新的内容,并切换到该目录。将堆栈存储在这样的文件中可以确保信息在所有打开的终端上都存在(甚至在重新启动时也是如此)。

以下是一些示例函数(警告:仅进行了少量测试)

代码语言:javascript
复制
directory_stack=/home/me/.directory_stack
function push_dir() {
    echo $(pwd) >> $directory_stack
    cd $1
}
function pop_dir() {
    [ ! -s $directory_stack ] && return
    newdir=$(sed -n '$p' $directory_stack)
    sed -i -e '$d' $directory_stack
    cd $newdir
}

将其添加到您的.bashrc中,它们将在您每次登录shell时自动定义。

票数 7
EN

Stack Overflow用户

发布于 2012-03-29 06:42:43

您可能希望编写几个外壳函数,并使用它们来代替pushdpopd。类似于以下(未经测试的)函数可能会完成此工作:

代码语言:javascript
复制
mypushd() { echo "$1" >> ~/.dir_stack ; cd "$1" }
mypopd() { dir=`tail -1 ~/.dir_stack` ; cd "$dir" ;
           foo=`wc -l ~/.dir_stack | egrep -o '[0-9]+'` ;
           ((foo=$foo-1)) ;
           mv ~/.dir_stack ~/.dir_stack_old ;
           head -n $foo ~/.dir_stack_old > ~/.dir_stack }

如果你写一个小程序来返回和删除文件的最后一行,你可以去掉一些丑陋的部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9916551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档