2013-09-24 18 views
7

Mam dziwny problem podczas pracy z językiem skryptowym bash. Oto go:Niespokojność skryptu Bash z pwd

PWD=${pwd} 
# several commands 
cd /etc/nginx/sites-enabled/ 
# more commands 
cd $PWD 
# I expect that I returning to my directory, 
# but $PWD contains current dir - /etc/nginx/sites-enabled/ 

Ten behaiveour jest jakiś leniwy - $ polecenia PWD sklepy, które oblicza aktualny katalog i zwraca go w tej chwili nazywamy $ PWD. Ale chcę zapisać w nim zmienną łańcuchową. Jak to zrobić?

Odpowiedz

21

PWD jest zmienną środowiskową i zmienia się po zmianie katalogu.

użyć innej nazwy dla zmiennej,

np

MYPWD=${PWD} #or MYPWD=$(pwd) 
cd /etc/nginx/sites-enabled/ 
cd $MYPWD 
+0

Po prostu niech będzie tutaj jako pytanie dokumentacji. Około pół godziny na rozwiązanie tego problemu. –

+3

Dobrym pomysłem jest używanie małych i małych liter dla zmiennych, aby uniknąć takich konfliktów ... –

2

Spróbuj:

PWD=`pwd` 

Lub:

PWD=$(pwd) 

Oba wyrażenia wykona pwd komendy i przechowywać dane wyjściowe polecenia w powłoce zmiennej PWD. W Internecie jest mnóstwo dyskusji o tym, kiedy należy używać każdego stylu. Przypominam tylko, że podejście "$ (cmd)" pozwala na zagnieżdżanie poleceń, np.

CURRENT_BASENAME=$(basename $(pwd)) 

Edytuj - Przyszło mi do głowy, że PWD jest wbudowaną zmienną powłoki, która zawsze rozszerza się do bieżącego katalogu roboczego.

+1

Nie byłem źle zagęszczony i nie wspomnieć, że $ PWD - jest zmienna systemowa i zawsze zwraca się do bieżącego katalogu . 'HPWD = $ (pwd)' działało dobrze. –