• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Farbige Konsolausgaben bei openSuse und Debian

halo44

Hacker
Leider finde ich keine Erklärung für die unterschiedliche Arbeitsweise von openSuse und Debian, wenn ich Konsolausgaben von bash-Skripten farbig gestalten will.

Ich hübsche die Ausgabe eines Skripts insoweit etwas auf, als ich die erfolgreiche Durchführung mit einem in blau gehaltenen Text melde. Ist das Skript gescheitert, vermelde ich das in roter Farbe. Das Skript setze ich sowohl unter openSuse als auch unter Debian ein.

Unter openSuse gelingt dies mit
Code:
echo -e "\033[0;34mSkript war erfolgreich\033[0m"
womit der Text "Skript war erfolgreich" in blauer Farbe ausgegeben wird.

Unter Debian wird dieser Text ebenfalls in blauer Farbe ausgegeben, allerdings wird in schwarz noch das -e dem Text vorangestellt.

Lasse ich bei Debian das -e weg, also
Code:
echo "\033[0;34mSkript war erfolgreich\033[0m"
entspricht die Ausgabe der von openSuse.

Versuche ich das -e auch bei openSuse weg zu lassen, so wird die ganze Codezeile mit allen Steuerzeichen in schwarz ausgegeben, d.h.
echo "\033[0;34mSkript war erfolgreich\033[0m"

Die man-Page sagt bei beiden Distributionen zu den Escapesequenzen "-e enable interpretation of backslash escapes".

Es handelt sich nicht um ein wirkliches Problem. Ich wüsste nur zu gerne, ob ich dies unterschiedliche Verhalten irgendwo dokumentiert finden kann.

Gruss H.
 
OP
H

halo44

Hacker
Danke für Deine Anregung. Hier fand ich diesen Hinweis
... I also find it may cause by ubuntu link /bin/sh to dash but NOT bash ...
und tatsächlich zeigt ein
Code:
ls -l /bin/sh
lrwxrwxrwx 1 root root      4 Mär  1  2012 sh -> dash
Nochmals vielen Dank. Meine Neugier ist befriedigt.

Gruss H.
 
OP
H

halo44

Hacker
Inzwischen habe ich noch etwas rausgefunden. Daher zur Ergänzung :

Rufe ich unter Debian mein Skript mit
Code:
bash Skriptname.sh
auf statt mit
Code:
sh Skriptname.sh
so verhält sich das Skript bei Debian exakt so wie bei openSuse. Weil bash statt sh benutzt wird, findet die "Umleitung" zur dash nicht statt.

Gruss H.
 
Ansonsten könntest Du dir ja auch angewöhnen statt #!/bin/sh gleich #!/bin/bash zu verwenden, dann sollten deine Skripte meistens auf allen Systemen gleich laufen (andere Systeme wie BSD mal außen vor).
 
OP
H

halo44

Hacker
Geier0815 schrieb:
Ansonsten könntest Du dir ja auch angewöhnen statt #!/bin/sh gleich #!/bin/bash zu verwenden ....

Ich verwende im Skript ja bereits #!/bin/bash, rufe das Skript aber mit sh Skriptname auf. Und Debian verlinkt dann sh zu dash und stört sich nicht an das Shebang im Skript.

Gruss H.
 
A

Anonymous

Gast
halo44 schrieb:
Ich verwende im Skript ja bereits #!/bin/bash, rufe das Skript aber mit sh Skriptname auf. Und Debian verlinkt dann sh zu dash und stört sich nicht an das Shebang im Skript.
wenn du das Script mit "sh script.sh" oder "bash script.sh" aufrufst dann wird die Shebang Zeile als Kommentar gewertet, das Script wird mit dem Programm aufgerufen das du davorgesetzt hast, egal was dort als Shebang steht.

Ausführungsrechte auf das Script, dieses entweder beim User unter /home/user/bin/ ablegen, oder sonst wo wo es im PATH ist und dann das script nur mit dem Scriptnamen aufrufen, (Alternativ Script mit vollem oder relativen Pathnamen aufrufen). Erst dann wird die Shebang-Zeile aktiv und entscheidet mit welchem Programm das Script abgearbeitet wird.

eine echte "sh" wirst du heutzutage nur sehr selten noch auf Linux vorfinden. Meist ist sh nur ein Link oder ein Hardlink auf eine andere Shell, das kann zB. bash, ksh oder auch dash sein, die sollten alle abwärtskompatibel zur "sh" sein.
Code:
ls -il /usr/bin/sh /bin/bash
 394106 -rwxr-xr-x 1 root root 607484  4. Aug 2012  /bin/bash
1050661 lrwxrwxrwx 1 root root      9 24. Aug 2012  /usr/bin/sh -> /bin/bash

robi
 
Oben