Comando pwd in Linux: directory corrente e percorsi -L e -P

pwd mostra il percorso assoluto della directory di lavoro corrente: la cartella da cui la shell o un programma interpreta i percorsi relativi. Usalo per controllare dove ti trovi nel terminale o quale posizione uno script usa come riferimento.

Quando il percorso contiene collegamenti simbolici, pwd -L può conservarne il nome logico, mentre pwd -P mostra il percorso fisico senza quei collegamenti. Specifica l’opzione quando la differenza conta: il comportamento predefinito può cambiare tra shell e comando esterno.

Che cos'è il comando pwd?

pwd significa print working directory, cioè “stampa la directory di lavoro”. Restituisce un percorso assoluto, non un elenco dei file presenti nella directory.

pwd

Se ti trovi nella directory di un progetto, un possibile risultato è il seguente. È un esempio di percorso: il nome dell’utente e delle cartelle sul tuo sistema saranno diversi.

/home/user/projects/web-app

La directory di lavoro è la base per interpretare i percorsi relativi. Per esempio, config/settings.ini può indicare file diversi a seconda della directory dalla quale avvii un programma.

Sintassi di base e utilizzo

pwd [options]

Il comando non accetta un percorso da esaminare come operando. Per conoscere la posizione attuale esegui pwd; per cambiarla usa cd. Il secondo esempio presume che /var/log esista e sia accessibile sul tuo sistema Linux.

pwd
cd /var/log && pwd

Dopo uno spostamento riuscito, il secondo pwd mostra /var/log. Il collegamento && esegue quel comando solo se cd riesce; se lo spostamento fallisce, la directory corrente resta invariata.

Differenza tra -L e -P

Un collegamento simbolico è un nome che rimanda a un altro percorso. Entrando in una directory tramite quel nome, il percorso logico ricordato dalla shell può differire da quello fisico. La tabella distingue le due opzioni; i nomi lunghi --logical e --physical appartengono al comando esterno GNU e non al pwd integrato di Bash.

Opzione Azione
-L, --logical Mostra il percorso logico valido della directory corrente; può conservare i nomi dei collegamenti simbolici usati per raggiungerla.
-P, --physical Mostra il percorso fisico della directory corrente, senza componenti che siano collegamenti simbolici.

Controllare il percorso logico con -L

L’esempio seguente presume che /srv/current esista già e sia un collegamento simbolico alla directory di una release. Non crea o modifica il collegamento: sostituisci il percorso con un collegamento presente sul tuo sistema.

cd /srv/current && pwd -L

Con quel collegamento e una posizione logica valida, un possibile risultato è:

/srv/current

Controllare il percorso fisico con -P

pwd -P

Se il collegamento /srv/current rimanda a /srv/releases/2026-09, il risultato fisico dell’esempio è:

/srv/releases/2026-09

-P è utile per riconoscere la release effettivamente raggiunta attraverso un collegamento. Il nome restituito descrive la directory corrente in quel momento: non garantisce che il collegamento o il file system restino invariati durante operazioni successive.

pwd integrato nella shell e comando esterno

Bash e molte altre shell hanno un pwd integrato, detto builtin. Il sistema può avere anche un eseguibile esterno, per esempio quello di GNU Coreutils. Controlla quale comando viene risolto nel tuo ambiente:

type -a pwd
command -V pwd

L’output seguente è un esempio in inglese. Percorsi, numero di risultati e lingua dei messaggi possono variare; un alias o una funzione possono comparire prima del builtin.

pwd is a shell builtin
pwd is /usr/bin/pwd

Quando interviene il builtin

La shell gestisce la propria directory di lavoro quando esegue cd. Il builtin può quindi mostrare la posizione senza avviare un eseguibile separato. Secondo il manuale di Bash, nell’uso normale, la modalità predefinita è logica; l’impostazione set -P può rendere fisico il comportamento predefinito.

Per evitare ambiguità tra ambienti, usa esplicitamente pwd -L o pwd -P quando ti serve una modalità precisa. Non passare automaticamente al builtin le opzioni lunghe elencate nel manuale GNU: verifica help pwd in Bash e la documentazione della shell utilizzata.

Eseguire il comando esterno

Puoi usare il percorso completo per scegliere un eseguibile esterno, dopo averne verificato la posizione con type -a pwd. I comandi seguenti presumono che sia installato in /usr/bin/pwd.

/usr/bin/pwd
/usr/bin/pwd -P

Nel comando GNU, senza opzioni, la modalità predefinita è -P, salvo quando è impostata la variabile POSIXLY_CORRECT. GNU -L usa PWD solo se contiene un percorso assoluto valido della directory corrente, senza componenti . o ..; altrimenti passa alla modalità fisica. Per script portabili specifica la modalità necessaria e non presumere che ogni sistema abbia l’eseguibile nello stesso percorso.

Le variabili PWD e OLDPWD

La shell mantiene variabili per la posizione corrente e quella precedente. I nomi in maiuscolo PWD e OLDPWD sono distinti dal comando minuscolo pwd. In Bash vengono aggiornati da uno spostamento riuscito con cd.

Elemento Significato
pwd Il comando che mostra il percorso della directory di lavoro corrente.
PWD Il percorso logico della directory corrente mantenuto dalla shell.
OLDPWD La directory precedente, usata anche da cd -; può non essere ancora impostata in una nuova shell.
printf '%s\n' "$PWD"
printf '%s\n' "$OLDPWD"
pwd -L
pwd -P

Non modificare PWD per cambiare directory: devi usare cd. Una variabile alterata non è una prova della posizione reale; se ti serve la modalità fisica, esegui pwd -P e verifica che termini senza errori.

Uso negli script shell

Registrare la directory di esecuzione

All’interno di uno script puoi registrare il percorso fisico prima di usare nomi relativi. Nel frammento seguente, || exit 1 interrompe lo script se pwd fallisce.

current_dir=$(pwd -P) || exit 1
printf 'Directory corrente: %s\n' "$current_dir"

Le virgolette doppie preservano i percorsi con spazi come un solo argomento. La sostituzione $(...) rimuove però i caratteri di nuova riga finali dell’output: questo frammento non è una soluzione generale per nomi di directory che terminano con una nuova riga.

Distinguere la directory corrente da quella dello script

pwd mostra la directory di lavoro del processo che esegue lo script, non la cartella nella quale il file dello script è salvato. Per verificarlo senza usare directory di sistema, salva l’esempio completo seguente in prova-pwd.sh e avvialo con bash prova-pwd.sh da una directory scrivibile. Crea solo la nuova cartella pwd-script-demo e si ferma se esiste già, evitando di sovrascriverla.

#!/usr/bin/env bash
mkdir pwd-script-demo || exit 1
cd ./pwd-script-demo || exit 1
mkdir tools "work area" || exit 1
cat > tools/show-cwd.sh <<'BASH' || exit 1
#!/usr/bin/env bash
current_dir=$(pwd -P) || exit 1
printf 'Directory corrente: %s\n' "$current_dir"
BASH
cd "./work area" || exit 1
bash ../tools/show-cwd.sh

Il file show-cwd.sh viene salvato in tools, ma il messaggio mostra un percorso che termina con /pwd-script-demo/work area, perché il processo entra lì prima di eseguirlo. Per riprovare usa una directory diversa; per annullare l’esercizio puoi rimuovere con il tuo gestore di file la sola cartella pwd-script-demo dopo averne controllato il contenuto. Ricavare la posizione del file dello script è un problema separato, che dipende dalla shell, dai collegamenti e dal modo di invocazione.

Confronto tra pwd e comandi correlati

Comando Scopo
pwd Stampa il percorso della directory di lavoro corrente.
cd Cambia la directory di lavoro della shell corrente.
realpath Normalizza il percorso specificato e lo mostra in forma assoluta, secondo le opzioni utilizzate.
dirname Elabora una stringa di percorso e ne estrae la parte della directory; non cambia la directory corrente.
readlink Senza opzioni, mostra la destinazione memorizzata in un collegamento simbolico.

Problemi comuni

Directory corrente eliminata o non accessibile

Se un altro processo rimuove la directory corrente o cambia l’accesso a una directory superiore, alcune implementazioni o modalità di pwd possono fallire. Un nome logico memorizzato può anche essere obsoleto. Spostati con cd in una directory esistente e accessibile e controlla di nuovo; non usare il solo testo di PWD per ignorare l’errore.

Il percorso e l'output sono diversi da quanto previsto

Se sei entrato tramite un collegamento simbolico, confronta pwd -L e pwd -P. La differenza può derivare dal nome logico e dalla directory fisica. Controlla anche alias, funzioni, builtin ed eseguibile esterno con type -a pwd, perché possono avere comportamenti predefiniti diversi.

Il percorso cambia negli script

Cron, systemd, i sistemi di integrazione continua (CI) e i container possono avviare un programma da una directory diversa da quella del terminale. Prima di usare percorsi relativi, registra la directory con pwd e imposta esplicitamente una posizione di lavoro adeguata oppure usa percorsi assoluti.

Domande frequenti

Cosa significa pwd?

Significa print working directory e mostra il percorso della directory di lavoro corrente.

pwd equivale a echo "$PWD"?

No. echo "$PWD" stampa il contenuto di una variabile, mentre pwd è un comando il cui comportamento dipende dall’implementazione e dalle opzioni. In una shell normale i risultati logici possono coincidere; pwd -P richiede invece il percorso fisico.

Quando usare pwd -L e quando pwd -P?

Usa -L per mantenere il nome logico valido usato durante lo spostamento e -P per un percorso senza collegamenti simbolici. Per un risultato prevedibile specifica l’opzione anziché affidarti al comportamento predefinito.

pwd mostra la posizione del file dello script?

No. Mostra la directory di lavoro corrente del processo. Uno script salvato in una cartella può essere avviato mentre il processo si trova in un’altra, come nell’esempio completo della guida.

Documentazione di riferimento