venerdì 28 agosto 2009

Comportamento anomalo nella Bash di Debian Testing

Oggi sono rimasto molto perplesso da un problema nella bash. Per fortuna mi ha fatto perdere poco tempo..
Ho la tendenza ad usare diversi shell script per le operazioni ripetitive, quindi stamattina lancio uno script per rigenerare le classi java di Apache Torque attraverso ant, farne un .jar e spostarlo dove mi serve.

E va in errore.

Pensando in un errore di configurazione inizio a dare un'occhiata ai log.. poi mi viene un dubbio e decido di fare girare l'applicazione java, per vedere quali modifiche sono state apportate ultimamente.
Lancio lo script che prepara l'ambiente per l'applicazione java:

shatsar@erakis:~/develop$ sh prepare-deploy.sh
prepare-deploy.sh: 2: pushd: not found
[.. altri errori]
shatsar@erakis:~/develop$ cat prepare-deploy.sh
#!/bin/bash
pushd /tmp
[.. altre operazioni]
shatsar@erakis:~/develop$ pushd /tmp
/tmp ~/develop
shatsar@erakis:/tmp$ cd
shatsar@erakis:~$ cd develop/
shatsar@erakis:~/develop$ chmod +x prepare-deploy.sh
shatsar@erakis:~/develop$ ./prepare-deploy.sh
/tmp ~/develop
[.. funziona tutto]


In definitiva credo sia un problema di inizializzazione della console figlia (creata lanciando sh ), tanto più che anche senza settare il flag x, basta fare


shatsar@erakis:~/develop$ source prepare-deploy.sh


Che esegue il file sh in questione nella shell corrente..
mah


UPDATE:
Il problema (verificatosi su debian testing) era dovuto ad un aggiornamento di settimana scorsa che aveva fatto puntare /bin/sh a /bin/dash invece che a /bin/bash. L'aggiornamento di oggi ripristina il tutto. Problema analizzato grazie all'intervento di Federico (nei commenti)

6 commenti:

Federico Fissore ha detto...

sono incappato in un problema simile qualche tempo fa

non tutti i comandi della bash sono disponibili in sh

hai provato a lanciare lo script con "bash prepare-deploy.sh" ?

se uno script comincia con "#!/bin/bash", quando lo esegui con "./eccetera" è come chiamarlo con "bash eccetera"

Federico Fissore ha detto...

visto che ci sono....

http://www.faqs.org/faqs/unix-faq/shell/shell-differences/

paragrafo "Shell features"
sh non supporta il "directory stack" (che dovrebbero essere popd e pushd) mentre bash sì

Shatsar ha detto...

Ottimo suggerimento.. infatti mi ha aiutato a risolvere il problema.

In debian /bin/sh è, normalmente, un link simbolico a bash, non il comando sh originario di Unix, invece su questo pc punta a /bin/dash ( http://en.wikipedia.org/wiki/Debian_Almquist_shell ), che, ho scoperto oggi, è una versione più leggera, sempre POSIX.

Però sticazzi, a parte il directory stack, non funzionano un sacco di altri script..

Shatsar ha detto...

Dopo aver modificato il link simbolico, ho visto che c'era, in debian testing, un aggiornamento della bash.

Ho ripristinato bin/sh come link a dash per vedere cosa succedeva.. effettivamente il nuovo aggiornamento bash ha fatto tornare tutto come prima:

erakis:/bin# ls -alh sh
lrwxrwxrwx 1 root root 4 2009-09-03 10:11 sh -> bash

Quindi effettivamente era un aggiornamento un po' problematico della bash ed ora è rientrato tutto.. ma almeno sappiamo nel dettaglio qual era il problema ;)

Shatsar ha detto...

Ultima cosa, il primo script in cui ho riscontrato il comportamento anomalo della bash è stato il redo.sh che Federico conosce benissimo :)

Lancia ant, imposta delle variabili, effettua qualche cat, qualche grep e poco altro. Però è uno script abbastanza lungo, per questo ho iniziato a fare i test sullo script "prepare-deploy.sh".

Il prepare-deploy utilizza pushd e popd, che in effetti sono comandi "strani", invece redo.sh usa comandi base.. assurdo pensare che non vada sotto dash!

Anonimo ha detto...

Hello,
I have developed a new clean web 2.0 wordpress theme.

Has 2 colours silver and blue, has custom header(colour or image).
I am curently working on it, so if you have suggestions let me know.

You can view live demo and download from here www.getbelle.com
If you found bug reports or you have suggestions pm me.
Wish you a happing using.

many thanks to [url=http://www.usainstantpayday.com/]USAInstantPayDay.com[/url] for helping with hosting and developement of the theme
PleskPressy