使用bash有没有一种方法可以推送和弹出当前工作目录?我尝试编写,bash;cd dir; ./dostuff;exit;
但是当前目录是现在dir
。
使用bash有没有一种方法可以推送和弹出当前工作目录?我尝试编写,bash;cd dir; ./dostuff;exit;
但是当前目录是现在dir
。
Answers:
调用将bash
启动一个新的子shell,该子shell具有自己的输入;直到退出,其他命令都不会运行。围绕要使用parens运行的命令也将启动一个新的子shell,但是它将在其中运行命令。
( cd dir ; ./dostuff )
如果不需要多个级别的目录历史记录,则还可以执行以下操作:
cd foo
# do your stuff in foo
cd -
与pushd
/ 相比popd
,这样做的缺点是,如果cd foo
失败,您将使用进入错误的目录cd -
。
(可能cd -
在外部脚本中更方便。“让我们回到原来的位置。”)
我使用别名来跟踪我的目录更改,因此在某个地方可以将cd更改为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'
..cd
足够健壮吗?看起来它仅从堆栈中删除了最后10个项目。
pushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.