it-swarm.it

Come posso ottenere l'attuale directory di lavoro?

Voglio avere uno script che porti l'attuale directory di lavoro in una variabile. La sezione che necessita della directory è come questa dir = pwd. Stampa solo pwd come posso ottenere la directory di lavoro corrente in una variabile?

205
Interesting...

Non è necessario farlo, è già in una variabile:

$ echo $PWD
/home/terdon

La variabile PWD è definita da POSIX e funzionerà su tutte le shell conformi a POSIX:

PWD

Impostato da Shell e dall'utilità cd. In Shell il valore deve essere inizializzato dall'ambiente come segue. Se un valore per PWD viene passato a Shell nell'ambiente quando viene eseguito, il valore è un nome di percorso assoluto della directory di lavoro corrente che non è più lungo di {PATH_MAX} byte incluso il byte null che termina e il valore non contiene tutti i componenti che sono punto o punto, quindi Shell deve impostare PWD sul valore dall'ambiente. Altrimenti, se un valore per PWD viene passato a Shell nell'ambiente quando viene eseguito, il valore è un percorso assoluto della directory di lavoro corrente e il valore non contiene alcun componente che sia punto o punto-punto, quindi non è specificato se Shell imposta PWD sul valore dall'ambiente o imposta PWD sul nome percorso che verrebbe generato da pwd -P. Altrimenti, l'utilità sh imposta PWD sul percorso che verrebbe prodotto da pwd -P. Nei casi in cui PWD è impostato sul valore dall'ambiente, il valore può contenere componenti che fanno riferimento a file di tipo link simbolico. Nei casi in cui PWD è impostato sul nome percorso che verrebbe emesso da pwd -P, se non vi è autorizzazione sufficiente sulla directory di lavoro corrente o su qualsiasi genitore di quella directory, per determinare quale sarebbe quel nome percorso, il valore di PWD è non specificato. Le assegnazioni a questa variabile possono essere ignorate. Se un'applicazione imposta o annulla il valore di PWD, i comportamenti delle utility cd e pwd non sono specificati.


Per la risposta più generale, il modo per salvare l'output di un comando in una variabile è racchiudere il comando in $() o ` ` (Backtick):

var=$(command)

o

var=`command`

Dei due, si preferisce $() poiché è più semplice creare comandi complessi come command0 $(command1 $(command2 $(command3))).

305
terdon

dir=$(pwd)

Questo è più portatile e preferito rispetto al metodo backticks.

L'uso di $() ti consente di annidare i comandi

ad es .: mech_pwd=$(pwd; echo in $(hostname))

30
Govind Kailas

Puoi utilizzare la variabile di ambiente $PWD o scrivi qualcosa di simile:

dir=`pwd`
11
chrk

È necessario utilizzare la sostituzione dei comandi per salvare l'output del comando pwd in una variabile. La sostituzione dei comandi può usare i backtick o i caratteri in dollari. Come questo:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
5

Il valore della directory di lavoro corrente può essere diverso. Se hai utilizzato i collegamenti simbolici per ottenere la directory corrente, pwd darà risultati diversi rispetto a/usr/bin/pwd. Dato che stai usando bash, vorrei usare:

dir=$(/usr/bin/pwd)

o come da commento:

dir=$(pwd -P)

poiché non mi piacciono le virgolette perché non possono nidificare.

1
Robert Jacobs