bash: pushd e popd not found… come risolvere…
Chi è abituato a compilare i sorgenti dei software che utilizza, sicuramente oramai si sarà fatto l’abitudine a schiantarsi contro errori improponibili che rendono l’operazione una cosa abbastanza noiosa a volte1

Ad esempio ieri mentre tentavo di compilare amule per rilasciare i pacchetti, non si riusciva nemmeno a finire l’autogen.sh perchè al lancio dell’automake restituiva: bash: pushd: not found bash: popd: not found e quindi andavano a mancare file importanti per la compilazione (al livello di makefile inesistenti, o script di configure, mica pizza e fichi)… Prima di tutto cerchiamo di capire cosa cavolo sono e a cosa servono quei comandi… Prima di tutto inizio col dire che sono comandi precostituiti della shell2 e servono a sostituire quello che normalmente utilizziamo per spostarci tra le directory: cd cd è comodo per l’utilizzo di tutti i giorni, ma quando dobbiamo creare script che hanno a che fare con centinaia/migliaia di livelli di directory, il suo utilizzo diventa via via sempre più complesso e meno comodo. Questi due comandi servono a creare uno stack3 di directory, che possiamo maneggiare per richiamare un determinato percorso senza dover scrivere "cd" seguito da n4 ../../ o peggio ancora slogandoci il dito mignolo (io uso quello) battendo TAB all’impazzata per scrivere l’intero percorso che mi interessa. Con il push inseriamo il percorso corrente nello stack, con popd richiamiamo l’ultimo percorso dello stack, o quello che ci interessa, per entrarci poi dentro. Per capire l’utilizzo vi consiglio di digitare: info pushd info popd capirete cosi l’utilizzo dei comandi con le relative opzioni. Bene perchè in ubuntu questo non va? Per una politica di canonical che ha scelto di linkare il comando sh con il comando dash, che altro non è che un tipo di shell come la bash. In molte distribuzioni infatti se digitiamo "ls -l /bin/sh" vedremo che questo è linkato su /bin/bash, su ubuntu invece no, ed è questa la causa del problema, perchè come detto prima pushd e popd sono comandi precostituiti della shell bash. Risolvere è quindi semplice, basta relinkare sh a bash…
$ sudo rm -f /bin/sh
$ sudo ln -s /bin/bash /bin/sh
ed ecco pushd e popd che tornano a funzionare automagicamente.
Update: (Grazie Oracolo)
Come gentilmente oracolo mi fa notare nel suo commento, la via più corretta da seguire sarebbe quella di dare: sudo dpkg-reconfigure dash e rispondere "no" alla domanda "Si vuole utilizzare dash come sostituto di sh?", in questa maniera in effetti si evita che ogni futuro aggiornamento vada a ricreare il link costringendoci a doverlo ri-modificare.
Effetti collaterali:
Pensavate fosse cosi semplice? NA vi siete sbagliati
in generale questo non dovrebbe causare problemi, ma può darsi che qualche script creato da un sistema ubuntu in special modo, e pensato da usarsi su ubuntu, potrebbe non funzionare a causa di questo link modificato, basterà modificare lo script in questione è dirgli di usare bash e non dash.
- ma che ci volete fare il bello di linux è questo, altrimenti c’è sempre il caro "clicca ed installa" Windows [↩]
- non sapete cosa significa? cercare comando precostituito in questo blog e già che ci siete iniziate a leggervi le guide perchè ne avete bisogno
[↩] - Da wikipedia: In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d’accesso seguono una politica LIFO (Last In First Out), ovvero tale per cui i dati vengono estratti (letti) in ordine rigorosamente inverso rispetto a quello in cui sono stati inseriti (scritti). Il nome di questa struttura dati è infatti la stessa parola inglese usata, per esempio, per indicare una "pila di piatti" o una "pila di giornali", e sottende per l’appunto l’idea che quando si pone un piatto nella pila lo si metta in cima, e che quando si preleva un piatto si prelevi, analogamente, quello in cima (da cui la dinamica LIFO), anche se è possibile inserire o prelevare elementi anche dalla coda, infatti più in generale la pila è un particolare tipo di lista in cui le operazioni di inserimento ed estrazione si compiono dallo stesso estremo. Per maggiori informazioni su cosa è uno stack, in particolare per capire i processi di push e pop, cliccare qui [↩]
- con n tendente ad infinito
[↩]
Articoli (forse) correlati:
- Nuova categoria bash e nuovi argomenti
Ho deciso di aprire una nuova categoria, chiamata bash... in questa categoria da oggi in poi verranno pubblicati articoli che... - Linux Bash: Operazioni di base sui file
Questa sera iniziamo a vedere i primi comandi che ci permettono di interagire con la shell linux per la gestione... - 10 consigli per programmare meglio in bash
Chi utilizza linux, sia il geek più avanzato che il primo dei "noob", prima o poi si imbatte nel... - Linux Bash: Operazioni sulle directory
Dopo aver visto come gestire i files sulla nostra linux box, vediamo come gestire le directory... Abbiamo già visto la... - Risolvere i freeze improvvisi del sistema con schede NVIDIA
Poco fa ho letto sul forum di ubuntu di una problematica di un utente legata ai driver nvidia... GF 8800...










