临时更改 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 中的当前工作目录以运行命令 [重复]的主要内容,如果未能解决你的问题,请参考以下文章