Uso dei comandi pushd e popd in Linux

Navigare attraverso strutture di directory complesse in un terminale Linux può richiedere molto tempo, soprattutto durante le attività di amministrazione del sistema o di scripting. Sebbene cd (change directory) sia il comando più utilizzato per la navigazione nelle directory, manca la capacità di gestire uno stack di directory, una caratteristica che pushd e popd offrono.

Questo articolo fornisce un’analisi approfondita dei comandi pushd e popd, mostrando come semplificare la navigazione nelle directory e rendere più efficienti i flussi di lavoro del terminale.

Cosa sono pushd e popd?

  • pushd (push directory) salva la directory corrente in uno stack e poi passa a una nuova directory.

  • popd (pop directory) rimuove la directory superiore dallo stack e ritorna a quella precedente.

Questi comandi fanno parte del meccanismo di stack di directory disponibile in bash, zsh e altre shell moderne.

Quando usarli

pushd e popd sono preziosi quando:

  • Ci si sposta spesso tra due o più directory.

  • Si scrivono script di shell che hanno bisogno di cambiare temporaneamente directory.

  • Si vuole evitare di inquinare la shell con comandi cd non necessari e mantenere il contesto.

Uso di base

1. comando pushd

pushd /percorso/per/target
  • Spinge la directory corrente nello stack.

  • Cambia la directory in /percorso/obiettivo.

esempio:

cd ~
pushd /var/www/html

Ora ci si trova in /var/www/html e la propria directory ~ è memorizzata nello stack.

2. comando popd

popd
  • Estrae la directory superiore dallo stack.

  • Riporta l’utente alla directory precedente.

Continuando l’esempio precedente:

popd

Si torna a ~.

Lavorare con lo stack di directory

Usate dirs per visualizzare lo stato attuale dello stack di directory:

dirs -v

Esempio di risultato:

0 /var/www/html
1 /home/user
  • L’indice 0 rappresenta la directory corrente.

  • Gli indici più alti rappresentano le directory precedenti.

Spingere la directory corrente senza cambiare

È possibile utilizzare:

pushd.

per spingere la directory corrente nello stack senza cambiare directory.

Esempi del mondo reale

Esempio 1: Salto tra le directory Source e Build

pushd ~/projects/myapp/src
# Perform edits
pushd ../build
make && make install
popd # Back to src
popd # Back to original directory

Efficiente per uno sviluppo iterativo senza comandi cd ripetitivi.

Esempio 2: Avvolgimento in uno script di Shell

Ecco uno script che costruisce il codice in una directory temporanea e lo restituisce in modo pulito:

#!/bin/bash
pushd /tmp/build-env || exit 1
# Configure and build
cmake ~/projects/myproject
make -j$(nproc)
popd

Se lo script fallisce all’interno di /tmp/build-env, si ritorna comunque alla posizione originale.

Suggerimenti e buone pratiche

Usare pushd invece di cd negli script

Questo rende gli script più manutenibili, soprattutto quando si verificano errori: si può tornare alla directory originale in modo sicuro.

Combinazione con dirs -v per il debug dello stack

Quando si lavora con più chiamate pushd, dirs -v aiuta a tracciare la cronologia della navigazione.

Usare gli indici con popd

È possibile rimuovere una directory specifica dallo stack:

popd 1

Rimuove la directory all’indice 1 (non necessariamente quella corrente).

Insidie comuni

  • Stack Overflow (non il sito 😄): L’uso eccessivo di pushd senza le corrispondenti chiamate a popd può gonfiare lo stack, portando a uno stato confuso delle directory.

  • Non sono disponibili ovunque: pushd e popd sono dei built-in in bash, zsh e altre shell simili – potrebbero non essere disponibili in shell minimali come sh.

  • Non persistenti: Lo stack delle directory è basato sulla sessione. Una volta terminata la sessione del terminale, lo stack si azzera.

Alias per utenti esperti

Nel vostro .bashrc o.zshrc, aggiungete:

alias pd='pushd'
alias pp='popd'
alias dl='dirs -v'

Questo riduce la pressione dei tasti e aumenta la produttività.