暂时更改bash中的当前工作目录以运行命令

Eth*_*ang 156 bash shell terminal working-directory

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

但是,如果我执行此命令:

cd SOME_PATH && run_some_command
Run Code Online (Sandbox Code Playgroud)

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

PWD=SOME_PATH run_some_command
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 275

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

(cd SOME_PATH && exec_some_command)
Run Code Online (Sandbox Code Playgroud)

演示:

$ pwd
/home/abhijit
$ (cd /tmp && pwd)  # directory changed in the subshell
/tmp 
$ pwd               # parent shell's pwd is still the same
/home/abhijit
Run Code Online (Sandbox Code Playgroud)

  • @BeC 使用 `function` 而不是 `alias`。迟到两年总比没有好。 (2认同)

piz*_*zza 110

bash有一个内置的

pushd SOME_PATH
run_stuff
...
...
popd 
Run Code Online (Sandbox Code Playgroud)

  • 如果run_stuff可能失败(并且脚本退出),则不一定是一个好的解决方案.你会被困在SOME_PATH中. (16认同)
  • +1,pushd/popd非常适合这种情况.在离开之前别忘了弹出. (3认同)
  • @ron.rothmanℝℝ你不能做一些像“pushd PATH;”这样的事情吗?(运行内容);[[“$?” != 0]] && 弹出;...; 流行音乐` (2认同)

yaz*_*azu 26

这样的事情应该有效:

sh -c 'cd /tmp && exec pwd'
Run Code Online (Sandbox Code Playgroud)

  • 我个人挖了这个版本 (2认同)