Commenti
- Correlati: Ottenere il directory dei sorgenti di uno script Bash dallinterno
- Questo non è un duplicato della domanda per la quale è attualmente contrassegnato come tale. Le due domande dovrebbero essere confrontate, almeno, in base ai loro titoli (così come alle loro risposte). Che la risposta a questa domanda sia già coperta da unaltra è, o dovrebbe essere, irrilevante.
- @KennyEvitt in realtà, uno dei motivi principali per cui chiudiamo è proprio perché una risposta ha stato dato altrove. E, infatti, la domanda principale qui è in realtà come assegnare loutput di un comando a una variabile, che è coperta dal dupe. Ho anche dato la risposta a questo caso specifico, quindi tutte le basi sono coperte. Non ci sarebbe alcun vantaggio ad aprirlo di nuovo.
- @terdon In quanto risorsa disponibile e destinata allintera popolazione di utenti Unix & Linux, questo è una domanda preziosa, anche se il richiedente originale aveva davvero solo bisogno di una risposta già trattata altrove. Semmai, penso che questa domanda dovrebbe essere modificata in modo che corrisponda più da vicino al suo titolo e dovrebbe essere riaperta, per non consentire ulteriori attività, ma per non implicare che questa domanda sia ' bad '.
- La chiusura di @KennyEvitt come duplicato non implica in alcun modo che la domanda sia cattiva! Questa domanda rimarrà qui, risposta, per sempre. Se vuoi davvero sapere come ottenere la directory di lavoro corrente, troverai la tua risposta qui. Se vuoi solo sapere come salvare loutput di un comando in una variabile, troverai la risposta anche qui seguendo il link al dupe. In ogni caso, questo non è ' davvero qualcosa che dovrei fare da solo, se ritieni fortemente che debba essere riaperto, apri una discussione su Unix e Linux Meta dove queste cose dovrebbero essere risolte.
Rispondi
Lì “Non è necessario farlo, è già in una variabile:
$ echo $PWD /home/terdon
PWD
la variabile è definita da POSIX e funzionerà su tutte le shell compatibili con POSIX:
PWD
Impostato dalla shell e dallutilità cd. Nella shell il valore deve essere inizializzato dallambiente come segue. Se un valore per PWD viene passato alla shell nellambiente quando viene eseguito, il valore è un percorso assoluto della directory di lavoro corrente che non è più lungo di {PATH_MAX} byte compreso il byte nullo di terminazione e il valore non contiene qualsiasi componente che sia punto o punto-punto, la shell deve impostare PWD al valore dallambiente. Altrimenti, se un valore per PWD viene passato alla shell nellambiente quando viene eseguito, il valore è un percorso assoluto della directory di lavoro corrente e il valore non contiene componenti punto o punto-punto, allora non è specificato se la shell imposta PWD sul valore dallambiente o imposta PWD sul percorso che sarebbe emesso da pwd -P. Altrimenti, lutility sh imposta PWD sul percorso che sarebbe emesso da pwd -P. Nei casi in cui PWD è impostato sul valore dallambiente, il valore può contenere componenti che fanno riferimento a file di tipo collegamento simbolico. Nei casi in cui PWD è impostato sul percorso che verrebbe emesso da pwd -P, se non ci sono permessi sufficienti sulla directory di lavoro corrente, o su qualsiasi genitore di quella directory, per determinare quale sarebbe quel percorso, il valore di PWD è non specificato. Le assegnazioni a questa variabile possono essere ignorate. Se unapplicazione imposta o disattiva il valore di PWD, i comportamenti delle utilità cd e pwd non sono specificati.
Per la risposta più generale, il modo per salvare loutput di un comando in una variabile è racchiudere il comando tra $()
o ` `
(backtick):
var=$(command)
o
var=`command`
Dei due, $()
è preferibile poiché è più facile creare comandi complessi come command0 $(command1 $(command2 $(command3)))
.
Answer
dir=$(pwd)
Questo è più portabile e preferito al metodo dei backtick.
Lutilizzo di $()
consente di nidificare i comandi
ad esempio: mech_pwd=$(pwd; echo in $(hostname))
Commenti
- In realtà, semmai, i backtics sono più portabili dato che precedono il formato
$()
.In teoria potrebbero esserci ancora alcune macchine che eseguono shell che non ' t supportano la più recente notazione$()
. Sebbene entrambi siano definiti da POSIX, il$()
è preferito oggi perché è una sintassi più pulita e può essere nidificato ($(command1 $(command2))
) in un modo più semplice dei backtick.
Risposta
Puoi utilizzare la variabile dambiente $PWD
o scrivi qualcosa come:
dir=`pwd`
Risposta
È necessario utilizzare la sostituzione del comando per salvare loutput del comando pwd
in una variabile. La sostituzione dei comandi può utilizzare backtick o caratteri dollaro. In questo modo:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Answer
Il valore della directory di lavoro corrente può essere diverso. Se hai usato collegamenti simbolici per ottenere la directory corrente, pwd darà risultati diversi da / usr / bin / pwd. Dato che stai usando bash, io userei:
dir=$(/usr/bin/pwd)
o come da commento:
dir=$(pwd -P)
poiché non mi piacciono le virgolette perché non possono annidarsi.
Commenti
- dir = $ (pwd -P) funziona anche.