我不知道是否有有效的方法来做到这一点。但是,我一直想看看这是否可能。
我知道pushd、popd和dirs对于很多事情都很有用,比如在你最近访问过的目录之间进行复制。
但是,有没有一种方法可以保持全局堆栈?因此,如果我在一个终端中推送某些东西(使用push d),它会反映到另一个终端中(可能只有登录会话中的终端)。
发布于 2012-03-29 06:50:38
您应该能够通过一对shell函数和一个临时文件来做到这一点。
您的临时文件将被命名为类似于'/home/me/.directory_stack‘的名称,并且只包含一个目录列表:
/home/me
/etc
/var/log您的'push_directory‘函数将简单地将当前目录添加到列表中。'pop_directory‘函数将从列表中拉出最新的内容,并切换到该目录。将堆栈存储在这样的文件中可以确保信息在所有打开的终端上都存在(甚至在重新启动时也是如此)。
以下是一些示例函数(警告:仅进行了少量测试)
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时自动定义。
发布于 2012-03-29 06:42:43
您可能希望编写几个外壳函数,并使用它们来代替pushd和popd。类似于以下(未经测试的)函数可能会完成此工作:
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 }如果你写一个小程序来返回和删除文件的最后一行,你可以去掉一些丑陋的部分。
https://stackoverflow.com/questions/9916551
复制相似问题