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

bash: pushd e popd not found... come risolvere...

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 :mrgreen: 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.

  1. ma che ci volete fare il bello di linux è questo, altrimenti c’è sempre il caro "clicca ed installa" Windows []
  2. non sapete cosa significa? cercare comando precostituito in questo blog e già che ci siete iniziate a leggervi le guide perchè ne avete bisogno ;) []
  3. 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 []
  4. con n tendente ad infinito :mrgreen: []

Altri articoli che potrebbero interessarti

Compilare Compiz Fusion GIT Attenzione! la procedura NON è più valida, leggete questo commento per chiarimenti. Come...
Ciao ciao ubuntu sei stata cmq una bella esperienza Era già da diverso tempo che ci stavo pensando ma dopo l'ultimo scherzetto mi sono finalmente...
Repository Attenzione questa pagina è molto vecchia, per consultare la pagina relativa al repository cliccare...
IBM lavora ad un nuovo primato: 20 petaflop di capacità di calcolo E' passato poco più di un anno da quando è stato costruito il supercomputer più...
Lista server Jabber: Il Portalinux c’è!! Come sapete da un paio di mesi abbiamo iniziato a offrire anche noi un servizio di messaggistica , chi...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).