ubuntuusers.de

Bash: Ausgabe von Programm in Variable speichern (backticks)

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

pas-calc

Anmeldungsdatum:
11. März 2012

Beiträge: 52

Hallo,

zwar kann ich bei manchen Programmen mit Backticks (diese:

`

), also z.B.

1
TEST=`echo "bla"`

die Ausgabe des Befehls in eine Variable speichern.

Leider scheint das bei manchen Programmen (scanimage, lpr) nicht zu gehen. Ich erhalte nur einen leeren Wert.

Kann das daran liegen, dass diese Programme nicht in die stdout(?) schreiben sondern nur aufs Terminal?

1
2
3
DEB=`scanimage -v --format=tiff --scan-resolution 300 > "scan.tif"`
RES=$?
echo "command exited with $RES and said: ${DEB}."

ergibt:

command exited with 0 and said: 

Wie kann ich die Ausgabe von scanimage bekommen?

Grüße ☺

P.S. Oder hat das was damit zu tun, dass ich die Spitzklammer nutze und damit irgendwie die Ausgabe umleite ?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

p23482394 schrieb:

P.S. Oder hat das was damit zu tun, dass ich die Spitzklammer nutze und damit irgendwie die Ausgabe umleite ?

Ja. Wenn auf /dev/stdout nix mehr ankommt, wird auch nix gespeichert. Aber womöglich wolltest Du ja die Ausgabe von /dev/stderr speichern ?

Im Übrigen: die `Backticks` gelten als veraltet. Man benutzt eigentlich nur noch $(diese Schreibweise), außer man hat irgendeine uralt-Minimal-Shell, die das nicht versteht. Und: $(die da) lassen sich auch schachteln !

→ vgl. in Greg's Wiki.

LG,

track

pas-calc

(Themenstarter)

Anmeldungsdatum:
11. März 2012

Beiträge: 52

Ja, genau: Das habe ich noch gar nicht erkannt. Ich möchte stdout in die Datei umleiten UND stderr nach stdout schreiben.

1> file ist stdout nach file

2> file ist stderr nach file

Ist dann folgender Befehl korrekt?

1
DEB=$(scanimage -v --format=tiff --scan-resolution 300 1> "scan.tif" 2>&1)

Oder leitet das dann stderr auch in die Datei um? Kann man überhaupt zwei verschiedene Ziele angeben? (command 1>stdout.log 2>&1)

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

p23482394 schrieb:

Oder leitet das dann stderr auch in die Datei um?

Ja.

Kann man überhaupt zwei verschiedene Ziele angeben?

Ja, man muss es nur anders herum schreiben:

deb=$(scanimage -v --format=tiff --scan-resolution 300  2>&1  > "scan.tif")

Ein Tip: schreib eigene Variablen immer $klein - $GROSS sind die Systemvariablen, und die willst Du nicht aus Versehen kaputt schreiben, nicht ? 🐸

LG,

track

pas-calc

(Themenstarter)

Anmeldungsdatum:
11. März 2012

Beiträge: 52

Danke! Es geht also doch, man muss nur wissen wie 😉

Wo wird denn eigentlich stderr normalerweise hingeschrieben, wenn man eine Anwendung ausführt (und nicht mit 2>etwas umleitet)?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

p23482394 schrieb:

Wo wird denn eigentlich stderr normalerweise hingeschrieben

Ganz normal, direkt und ungepuffert ins Terminal.

LG,

track

Antworten |