临时更改 bash 中的当前工作目录以运行命令 [重复]

Posted

技术标签:

【中文标题】临时更改 bash 中的当前工作目录以运行命令 [重复]【英文标题】:Temporarily change current working directory in bash to run a command [duplicate] 【发布时间】:2012-05-10 01:28:47 【问题描述】:

我知道我可以使用cd 命令在 bash 中更改我的工作目录。

但是如果我执行这个命令:

cd SOME_PATH && run_some_command

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

PWD=SOME_PATH run_some_command

【问题讨论】:

为什么不保持简单cd SOME_PATH && run_some_command && cd -最后一个命令会带你回到最后一个 pwd 目录。 @Sahil 那么它不能并行运行 【参考方案1】:

您可以通过将命令行括在一对括号中来在子shell中运行cd和可执行文件:

(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

【讨论】:

这样就使使用exec 的意义失效了,你不觉得吗? @tripleee:我猜 OP 的意思是执行任何可执行文件而不是 exec。 不能在 shell 文件中工作 @BeC 使用function 而不是alias。迟到两年总比没有好。 最佳答案。也适用于多行包装器和过早退出【参考方案2】:

bash 有一个内置的

pushd SOME_PATH
run_stuff
...
...
popd 

【讨论】:

+1,pushd/popd 非常适合这个。只是不要忘记在退出之前弹出。 如果 run_stuff 可能失败(并且脚本退出),不一定是一个好的解决方案。你会被困在 SOME_PATH 中。 @ron.rothmanℝℝ 你就不能像pushd PATH; (run_stuff); [[ "$?" != 0 ]] && popd; ...; popd 就我而言,如果脚本执行失败,例如git pull,我想在git log的目录中调查。 在测试时快速更新另一个项目下的目标的好方法。谢谢!【参考方案3】:

这样的事情应该可以工作:

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

【讨论】:

以上是关于临时更改 bash 中的当前工作目录以运行命令 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Bash 如何在不同的目录上下文中执行命令?

通过 PHP 运行 bash 命令,更改目录然后执行二进制

运行 Node 脚本时更改当前 shell 上下文中的工作目录

带有 bash 的 knitr:更改工作目录

如何缩短命令行提示符当前目录?

用于 Windows 的 Git 中的 Bash:使用 CMD.exe /C 和 args 运行命令时的怪异