2012-04-30 23 views
104

我知道我可以使用cd命令在bash中更改我的工作目录。暂时在bash中改变当前工作目录以运行命令

但如果我这样做的命令:

cd SOME_PATH && run_some_command 

然后工作目录将被永久改变。有没有办法像这样暂时改变工作目录?

(cd SOME_PATH && exec_some_command) 

演示:

$ pwd 
/home/abhijit 
$ (cd /tmp && pwd) # directory changed in the subshell 
/tmp 
$ pwd    # parent shell's pwd is still the same 
/home/abhijit 
+1

为什么不保持它的简单** CD SOME_PATH && run_some_command && CD - **最后一个命令将带你回到过去的PWD目录。 – Sahil

回答

186

您可以通过内附的命令行中一对括号运行在一个子shell的cd和可执行:

sh -c 'cd /tmp && exec pwd' 
+0

这种无效的使用'执行'的观点,你不觉得吗? – tripleee

+0

@tripleee:我猜OP意味着执行任何可执行文件,而不是执行文件。 – codaddict

+0

不能在shell文件中工作 –

18

像这样的东西应该工作

PWD=SOME_PATH run_some_command 
+0

我个人挖掘这个版本 –

+0

所有的答案都很好,但这正是我所寻找的 – mkrufky

+0

+短而甜!谢谢 –

82

bash有一个内置

pushd SOME_PATH 
run_stuff 
... 
... 
popd 
+3

+1,pushd/popd是理想的选择。只是不要忘记在退出之前弹出。 – Fr0sT

+11

如果run_stuff可能失败(并且脚本退出),则不一定是一个好的解决方案。你会被困在SOME_PATH中。 –

+1

@ron.rothmanℝℝ难道你不会像'pushd PATH; (run_stuff); [[“$?” != 0]]&& popd; ...; popd' – galois

相关问题