推/弹出当前目录?

80 linux bash

使用 bash 有没有办法推送和弹出当前工作目录?我尝试编写,bash;cd dir; ./dostuff;exit;但当前目录现在是dir.

Nif*_*fle 102

pushdpopd

Bash 将保留您访问的目录的历史记录,您只需要询问即可。Bash 将历史记录存储在堆栈中,并使用 pushd 和 popd 命令来管理堆栈。

更多阅读

例子:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Run Code Online (Sandbox Code Playgroud)

  • 摘自链接`pushd 将当前目录保存在目录堆栈的顶部,然后 cd 到 dir。如果没有参数,pushd 会交换前两个目录。 (4认同)

Ign*_*ams 35

调用bash启动一个新的子shell,它有自己的输入;在退出之前,其他命令都不会运行。围绕要使用括号运行的命令也将启动一个新的子 shell,但它将运行其中的命令。

( cd dir ; ./dostuff )
Run Code Online (Sandbox Code Playgroud)


tuo*_*alo 14

如果您不需要多级目录历史记录,您还可以执行以下操作:

cd foo
# do your stuff in foo
cd -
Run Code Online (Sandbox Code Playgroud)

pushd/相比popd,它的缺点是如果cd foo失败,您最终会进入错误的目录cd -

(可能cd -在脚本之外更方便。“让我们回到我刚才所在的地方。”)


小智 5

我使用别名来跟踪我的目录更改,以便在某个地方使用 'cd',我可以回到我使用 'cd.' 的地方,或者使用 'cd..' 返回两个;等等;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'
Run Code Online (Sandbox Code Playgroud)