Page 1 of 1
Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-18 19:21
by ddm3ve
Ich bin heute auf ein seltsames Phänomen gestossen.
Mal was für die gewitzten unter uns.
Und zwar handelt es sich um eine etwas umfangreicheres bash script.
Es gibt eine Stelle im Script wo Parameter in einer for Schleife durchlaufen werden.
LISTE="sdr1 sdr2 sdr3 sdr3 sdr4 sdr6 .... sdr99"
Ja, man könnte es auch in er Sequenz, aber es hat Gründe, warum es so ist und es gibt einige Lücken.
Die Schleife :
for ITEM in ${LISTE}; do
echo "Item: ${ITEM}";
done
so weit so gut.
Führe ich das in der bash aus, gibt es kein Problem.
Hingegen als cronjob wirft das echo ${ITEM} exakt den Inhalt aus ${LISTE} wieder.
-> Item: sdr1 sdr2 sdr3 ....
Ich verstehe gerade die Welt nicht mehr.
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-18 19:49
by Joe User
Ganz grob: LISTE ist ein String inklusive Spaces, for benötigt aber Newlines als Trenner.
Du musste LISTE lediglich wie in diesem Beispiel
http://tldp.org/LDP/abs/html/abs-guide.html#FILEINFO umbauen und gut ist.
http://tldp.org/LDP/abs/html/abs-guide.html ist generell extrem lesenswert ;)
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-18 20:06
by Joe User
Ach ja, alternativ kannst Du das auch mit einem Array lösen (Beispiele gibt es ebenfalls im ABS-Guide), dann ist das Script (wenn ich mich richtig erinnere) aber unter Umständen nicht mehr kompatibel mit anderen Shells.
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-18 21:18
by ddm3ve
Also eine array fällt aus. Je nach Zielumgebung wird mit der verfügbaren bash version Array noch nicht unterstützt.
Aber Danke für Deinen Hinweis mit Neilen als Trenner.
-> Es it nicht ganz richtig, welcher Trenner benötigt wird wie wie folgt definiert:
IFS='' # Null IFS means no word breaks
Und genau das hat sich geändert.
Ich muss wohl weiter ausholen, der obige Part (for Schleife mit der Liste) existiert schon seid rund 1 Jahr.
In diesem Script wurden mehrere "Art" Plugins erstellt, welche on Demand gesourced werden.
Es kam eine neues Plugin hinzu, gab es zwar schonmal in der Form, aber das scheint mir erstmal die plausibelste Erklärung:
Genau dort muss ich die Trennzeichen ändern.
OLDIFS=$IFS
IFS=':'
Für mich sieht es aus, dass genau das eine Problem macht, obwohl das Trennzeichen am Ende des Plugins wieder zurück gesetzt wird.
Aber Deine Erklärung, scheint mir erstmal ach in Punkto: Shell vs. cron nicht plausibel.
Auf den System gibt es nur eine bash. Die shebang entsprechend gesetzt. und die Konsole definitiv eine bash.
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-18 23:27
by Joe User
Per cron ist es keine Login-Shell und das macht je nach gesetzten Optionen ebenfalls einen Unterschied.
Die einzelnen Defaults und Konfigurationsdateien sollten in der Manpage für bash genannt sein.
/etc/profile /etc/bashrc ~/.profile ~/.bashrc fallen mir spontan ein, da waren aber noch mehr.
Ansonsten fällt mir auf die Schnelle keine Lösung ein, ich bin zu lange raus aus bash.
Allerdings hatte ich das gleiche Problem vor einigen Jahren auch mal und hatte damals wegen Zeitmangel einfach quick&dirty mittels tr oder sed die Spaces durch Newlines ersetzt, das ist aber keine Lösung sondern nur ein Hack.
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-19 00:08
by Joe User
Habe nochmal ein paar meiner alten Bash-Scripts von 2008-2011 durchgeschaut, konnte meinen erwähnten Hack zwar nicht darin finden, da ich es damals bereits mittels Arrays gelöst hatte. Ältere Scripts habe ich leider nicht mehr.
Arrays sollten also auch bei Euch möglich sein, so alt sind Eure Systeme ja nicht ;)
Re: Shellscript verhält sich seltsam im crontab.
Posted: 2015-08-20 22:34
by ddm3ve
Leider mischen sich unterschiedliche OSe und ja da sind auch Kisten dabei mit einem steinalten bash.
Auf der anderen Seite wir verarbeiten unterschiedlichste Listen, wo ich eine Umwandlung in ein Array häufig als Mühsam erachte.
Ich habe aber den Fall nochmals erruiert, es liegt definitiv am cron, der sich hier speziell verhält.