Shellscript verhält sich seltsam im crontab.

Bash, Shell, PHP, Python, Perl, CGI
ddm3ve
Moderator
Moderator
Posts: 1125
Joined: 2011-07-04 10:56

Shellscript verhält sich seltsam im crontab.

Post by ddm3ve » 2015-08-18 19:21

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.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Shellscript verhält sich seltsam im crontab.

Post by Joe User » 2015-08-18 19:49

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 ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Shellscript verhält sich seltsam im crontab.

Post by Joe User » 2015-08-18 20:06

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

ddm3ve
Moderator
Moderator
Posts: 1125
Joined: 2011-07-04 10:56

Re: Shellscript verhält sich seltsam im crontab.

Post by ddm3ve » 2015-08-18 21:18

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.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Shellscript verhält sich seltsam im crontab.

Post by Joe User » 2015-08-18 23:27

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Shellscript verhält sich seltsam im crontab.

Post by Joe User » 2015-08-19 00:08

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 ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

ddm3ve
Moderator
Moderator
Posts: 1125
Joined: 2011-07-04 10:56

Re: Shellscript verhält sich seltsam im crontab.

Post by ddm3ve » 2015-08-20 22:34

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.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.