我不知道是否有一种有效的方法可以做到这一点。但是,一直想看看它是否可能。
我知道pushd,popd和dirs对于你最近访问过的目录之间的复制很有用。
但是,有没有一种方法可以保持全局堆栈?因此,如果我在一个终端中推送一些东西(使用pushd),它会反映在另一个终端中(可能只是该登录会话中的终端)。
答案 0 :(得分:4)
您应该可以使用一对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时都会自动定义它们。
答案 1 :(得分:3)
您可能希望编写一些shell函数并使用它们代替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 }
如果你编写一个返回并删除文件最后一行的小程序,你可以摆脱一些丑陋的位。