2012-04-30 40 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

相關問題