2013-09-24 23 views
7

Ho qualche problema strano mentre lavoro con il linguaggio di scripting bash. Qui è esso:Bash script goffaggine con 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/ 

Questa behaiveour è un qualche tipo di pigro - $ negozi comando pwd, che calcola directory corrente e lo restituisce nel momento che noi chiamiamo $ PWD. Ma voglio memorizzare la variabile di stringa in esso. Come farlo?

risposta

21

PWD è una variabile ambientale e viene modificata quando si modifica la directory.

utilizzare un nome diverso per la variabile,

esempio:

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

Lascia che sia qui come una domanda di documentazione. Circa una mezz'ora per risolvere questo problema. –

+3

È consigliabile utilizzare nomi minuscoli (o maiuscole) per le variabili, per evitare conflitti come questo ... –

2

Prova:

PWD=`pwd` 

Oppure:

PWD=$(pwd) 

Entrambe le espressioni eseguirà il pwd comando e memorizzare l'output del comando nella shell PWD variabile. C'è un sacco di discussioni sul web su quando utilizzare ogni stile. L'unico punto che ricordo è che l'approccio "$ (cmd)" consente l'annidamento di comandi, ad es.

CURRENT_BASENAME=$(basename $(pwd)) 

Edit - E 'appena venuto in mente che PWD è una costruito nel variabile di shell che si espande sempre nella directory di lavoro corrente.

+1

No. Stavo male concentrato e non ho menzionato, che $ PWD - è una variabile di sistema e SEMPRE punta alla directory corrente . 'HPWD = $ (pwd)' ha funzionato bene. –