Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 17:05:00

Moinsen!

Ich fall gleich mit der Tür ins Haus. Gegeben sei - auch für euch zum ausprobieren :) - folgendes Shellscript(-Fragment):

Code: Alles auswählen

wget https://www.postbank.de/dienste/fondsundboerse/aktien_detail.html?ID_NOTATION=172219595 -O/tmp/innogy --no-check-certificate --quiet 
echo -n '\t'`grep 'AKTUELL: [0-9]*,[0-9]*' /tmp/innogy -o| grep [0-9]*,[0-9]* -o` € >> depot.csv
wget https://www.postbank.de/dienste/fondsundboerse/aktien_detail.html?ID_NOTATION=180039 -O/tmp/commerz --no-check-certificate --quiet 
echo -n '\t'`grep 'AKTUELL: [0-9]*,[0-9]*' /tmp/commerz -o| grep [0-9]*,[0-9]* -o` € >> depot.csv
wget https://www.postbank.de/dienste/fondsundboerse/aktien_detail.html?ID_NOTATION=3231118 -O/tmp/grund --no-check-certificate --quiet 
echo -n '\t'`grep 'AKTUELL: [0-9]*,[0-9]*' /tmp/grund -o| grep [0-9]*,[0-9]* -o` € >> depot.csv
Unter Ubuntu schreibt es wie gewünscht Tabulatoren in die CSV-Datei. Unter Debian habe ich statt der TABs wortwörtlich "\t" im Ausgabefile stehen. Wieso, weshalb und warum das unterschiedliche Verhalten? "Debian" != "Debian basiert" bis hin zu solch grundlegenden Dingen? Ich fühle mich wieder einmal verwirrt :facepalm:

Jemand hier ne Idee?
TIA!
Ulrich

letzter3
Beiträge: 276
Registriert: 16.07.2011 22:07:31

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von letzter3 » 13.03.2018 17:38:49

bash?
dash?
...
...

Benutzeravatar
Tintom
Beiträge: 1401
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von Tintom » 13.03.2018 17:47:39

echo != echo :wink:
Manche Shells (z.B. bash) bringen ihr eigenes echo mit (type echo gibt Aufschluss darüber). Die können dann ggf. Sachen anders interpretieren.

tobo
Beiträge: 513
Registriert: 10.12.2008 10:51:41

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von tobo » 13.03.2018 17:50:43

Um Backslash Escapes reinzuschreiben braucht es für gewöhnlich ein echo -e. Der Befehl echo ist sowohl ein Shell Builtin als auch eine ausführbare Datei unter /bin. Du rufst ohne Pfad auf, benutzt also das Builtin. Die Unterschiede sind dann also vermutlich in der benutzen Shell zu suchen - man <SHELL> und dort dann irgendwo unter SHELL BUILTIN COMMANDS und dort dann unter echo oder einfacher mit help echo.

Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 18:03:37

Tintom hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 17:47:39
echo != echo :wink:
Manche Shells (z.B. bash) bringen ihr eigenes echo mit (type echo gibt Aufschluss darüber). Die können dann ggf. Sachen anders interpretieren.
Mhh: Sowohl unter Ubuntu als auch Debian ergibt das "echo is a shellbuiltin" respektive "echo ist eine von der Shell mitgelieferte Funktion". Inwieweit brächte mich das weiter, um herauszufinden, warum Ubuntu TABs in die csv schreibt, Debian jedoch "\t"? Bezeichnenderweise habe ich mir damals unter Ubuntu förmlich einen abgebrochen, um genau TABs in die csv reinschreiben zu können; dasselbe Script unter Debian schreibt nun "\t". Mir nochmal einen abzubrechen, damit nun auch Debian TABs schreibt, habe ich eigentlich nicht vor :(

Was genau wäre also zu tun? Oder besser noch: Zu verstehen?

CU!
Ulrich

Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 18:08:06

letzter3 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 17:38:49
bash?
dash?
...
...
Taxi. Ägypten.Hegoland. In beiden Fällen quasi "out of the box" installiert. Und immer wieder - der Fall heute ist ja nicht das erste Mal! - eklantante Unterschiede zwischen Debian und Ubuntu festgestellt. Genauer gesagt, habe ich mich als Windows-Umsteiger schon jahrelang damit abgequält, um Ubuntu in den Griff zu bekommen, daß es als Windows-Alternative funktioniert. Und nun scheint mich Debian um dieselben Jahre zurückzuwerfen: Da ist - fast - alles ganz anders als unter Ubuntu :(

owl102
Beiträge: 2296
Registriert: 16.10.2010 13:05:57
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Timbuktu

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von owl102 » 13.03.2018 18:11:04

tobo hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 17:50:43
echo -e
Ist aber AFAIK nicht durch POSIX gedeckt. Überhaupt ist bezüglich echo recht wenig standardisiert, außer, daß es echo gibt.

Davon ab ist es sowieso gefährlich, Ausgaben von anderen Anwendungen direkt in die Zeichenkette zu packen, da diese wiederum Zeichen (wie etwa den Backslash) enthalten können, die echo (miß-)interpretieren könnte.

Dies sind beides handfeste Gründe, stattdessen printf mit Platzhaltern zu verwenden, zum Beispiel:

Code: Alles auswählen

printf "\t%s €" "$(grep 'AKTUELL: [0-9]*,[0-9]*' /tmp/innogy -o| grep '[0-9]*,[0-9]*' -o)" >> depot.csv
BTW: Wenn du "#!/bin/bash" als erste Zeile in deinen Scripten verwendest, sollte es solche Unterschiede nicht geben. Vermutlich steht bei dir aber "#!/bin/sh".
Fedora 28 Workstation -- openSUSE Leap 42 / Gnome -- Debian 9 (Qnap TS-109/119) -- OmniOS (HP N54L)

Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 18:15:09

letzter3 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 17:38:49
bash?
dash?
...
...
Laut "echo $SHELL" sowohl auf Debian als auch Ubuntu "/bin/bash". Und nu?

Benutzeravatar
Tintom
Beiträge: 1401
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von Tintom » 13.03.2018 18:16:24

zebulon42 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 18:03:37
Was genau wäre also zu tun? Oder besser noch: Zu verstehen?
Lies dir den Beitrag von @tobo durch.
Zum Verständnis: Anscheinend wird das Skript auf dem einen System mit bash und auf dem System mit dash ausgeführt. Du kannst jetzt entweder das Skript unter einer bestimmten Shell laufen lassen (siehe Shebang) oder du ersetzt in deinem Skript echo durch /bin/echo und gibst dann noch den Schalter '-e' mit

Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 18:26:35

owl102 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 18:11:04

BTW: Wenn du "#!/bin/bash" als erste Zeile in deinen Scripten verwendest, sollte es solche Unterschiede nicht geben. Vermutlich steht bei dir aber "#!/bin/sh".
Weder noch. Da steht eigentlich gar kein Shebang und ich hatte bis dato auch keinen Anlaß, einen solchen zu setzen. Aber probieren wir es mal aus. Script um ""#!/bin/bash" erweitert: Unter Debian "\t" im csv. Unter Ubuntu jetzt auch "\t". Ich krieg die Kriese …

Was kommt BTW denn bei euch raus?

Benutzeravatar
Tintom
Beiträge: 1401
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von Tintom » 13.03.2018 18:31:51

zebulon42 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 18:26:35
owl102 hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 18:11:04

BTW: Wenn du "#!/bin/bash" als erste Zeile in deinen Scripten verwendest, sollte es solche Unterschiede nicht geben. Vermutlich steht bei dir aber "#!/bin/sh".
Weder noch. Da steht eigentlich gar kein Shebang und ich hatte bis dato auch keinen Anlaß, einen solchen zu setzen. Aber probieren wir es mal aus. Script um ""#!/bin/bash" erweitert: Unter Debian "\t" im csv. Unter Ubuntu jetzt auch "\t". Ich krieg die Kriese …

Was kommt BTW denn bei euch raus?
Unter bash mit hinzugefügtem Schalter '-e' tut es das was es soll.

Benutzeravatar
zebulon42
Beiträge: 21
Registriert: 17.10.2017 11:15:09
Kontaktdaten:

Re: Unterschiedliches Verhalten eines Shellscriptes unter Ubuntu und Debian

Beitrag von zebulon42 » 13.03.2018 18:53:10

Tintom hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 18:16:24
Anscheinend wird das Skript auf dem einen System mit bash und auf dem System mit dash ausgeführt.
Es scheint aus meiner bescheidenen Windows-Umsteigersicht in der Tat so. Ohne Shebang scheint mir Ubuntu Scripte nicht unter der Default(?)-Shell, sondern der dash auszuführen. Debian dagegen nimmt ohne Shebang die bash. Mehr oder weniger laienhaft auf eure Tipps hoffend, habe ich jetzt mal das Script um ein "#!/bin/dash" ergänzt. Auf den ersten Blick habe ich jetzt auch unter Debian die erforderlichen TABs in der csv.

Den zweiten "Alle Scripts, die ohne Weiteres unter Ubuntu liefen, für Debian mit "#!/bin/dash" einzuleiten"-Blick überschlafe ich aber erstmal; mir brummt schon wieder der Pinguinschädel :oops:

Zunächst also erstmal "nur" herzlichen Dank für eure Geduld mit mir. Das schafft nicht jedes Forum; ihr könnt euch also was drauf einbilden :D

Antworten