使“pushd”目录堆栈持久化

Sol*_*osa 5 bash pushd cwd

好的,这是一个简短的问题。我只是碰巧知道使用pushd命令,我们可以将更多工作目录添加到我们的列表中,这很方便。但是有没有办法让这个列表永久化,这样它就可以在重启或注销后继续存在?

Kus*_*nda 5

~/.bashrc如果您愿意,您可以预先填充文件中的目录堆栈:

for dir in "$HOME/dir" /usr/src /usr/local/lib; do
    pushd -n "$dir" >/dev/null
end
Run Code Online (Sandbox Code Playgroud)

或者,如果您想将目录放在一个数组中并从那里使用它们:

dirstack=( "$HOME/dir"
           /usr/src
           /usr/local/lib )

for dir in "${dirstack[@]}"; do
    pushd -n "$dir" >/dev/null
end

unset dirstack
Run Code Online (Sandbox Code Playgroud)

使用-n,pushd不会实际更改工作目录,而只是将给定目录添加到堆栈中。

如果您愿意,您可以将DIRSTACK数组的值(此处为大写变量名),即当前目录堆栈,存储到来自 的文件中~/.bash_logout,然后读取该文件,~/.bashrc而不是使用预定义的数组。

~/.bash_logout

declare -p DIRSTACK >"$HOME/.dirstack"
Run Code Online (Sandbox Code Playgroud)

~/.bashrc

if [ -f "$HOME/.dirstack" ]; then
    source "$HOME/.dirstack"
fi
Run Code Online (Sandbox Code Playgroud)

我不知道这在您使用多个终端的情况下效果如何。.dirstack如果终端bash作为登录 shell运行,则每次终端退出时该文件都会被覆盖。