2012-04-30 35 views
104

Wiem, że mogę użyć polecenia cd, aby zmienić katalog roboczy w bashu.Tymczasowo zmień bieżący katalog roboczy w bash, aby uruchomić polecenie

Ale jeśli to zrobię to polecenie:

cd SOME_PATH && run_some_command 

Następnie katalog roboczy zostanie zmieniony na stałe. Czy istnieje jakiś sposób, aby zmienić katalog roboczy tymczasowo?

PWD=SOME_PATH run_some_command 
+1

dlaczego nie Keep It Simple ** cd SOME_PATH && run_some_command && cd - ** ostatnia komenda zabierze Cię z powrotem do ostatniego katalogu pwd. – Sahil

Odpowiedz

186

można uruchomić cd i wykonywalny w podpowłoce załączając wiersza poleceń w nawiasach:

(cd SOME_PATH && exec_some_command) 

Demo:

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

Ten rodzaj unieważnia użycie "exec", nie sądzisz? – tripleee

+0

@tripleee: Sądzę, że OP miał na celu wykonanie dowolnego pliku wykonywalnego, a nie exec. – codaddict

+0

nie działa w pliku powłoki –

18

Coś jak to powinno działać :

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

Osobiście kopie tę wersję –

+0

wszystkie odpowiedzi są świetne, ale to jest dokładnie to, czego szukałem – mkrufky

+0

+ krótkie i słodkie !! Dziękuję –

82

bash posiada wbudowaną

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

+1, pushd/popd jest idealny do tego. Tylko nie zapomnij popd przed wyjściem. – Fr0sT

+11

Niekoniecznie dobre rozwiązanie, jeśli run_stuff może się nie powieść (i skrypt wychodzi). Utknąłbyś w SOME_PATH. –

+1

@ ron.rothmanℝℝ nie można po prostu zrobić coś takiego jak 'pushd PATH; (run_stuff); [["$?" ! = 0]] & & popd; ...; popd' – galois

Powiązane problemy