pushd popd全局目录堆栈?

Rag*_*san 5 shell

我不知道是否有一种有效的方法可以做到这一点.但是,一直想看看它是否可能.

我知道pushd,popd和dirs对于你最近访问过的目录之间的复制很有用.

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

bta*_*bta 5

您应该能够使用一对shell函数和一个临时文件来执行此操作。

您的临时文件将被命名为“ /home/me/.directory_stack”,并且仅包含目录列表:

/home/me
/etc
/var/log
Run Code Online (Sandbox Code Playgroud)

您的“ 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
}
Run Code Online (Sandbox Code Playgroud)

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