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
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:
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"
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ì
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..
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 ;)
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!
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
Posta un commento