2017-11-22 4 views
0

Ich habe ein basisches Bash-Skript erstellt, um ein anderes Skript auszuführen, über das ich keine Kontrolle habe.Lesen von Terminal Line Bash Script

Dieses zweite Skript wird den Terminal-Text ausgeben, z. B. Fehlercodes, die ich als Eingabe für den Rest meines Skripts verwenden möchte. Ich bin sehr neu in der Programmierung mit Bash-Skripten. Gibt es eine eingebaute Funktion, die alles, was gerade auf das Terminal ausgegeben wurde, einliest und es gleich einer internen Variable setzt.

+0

Können Sie ein Rohr 'verwenden |' die Ausgabe des anderen Skript als Eingabe umleiten zu Dein Skript? Obwohl Fehlercodes möglicherweise Teil von STDERR anstelle von STDOUT sind. – beroe

+0

'myVar = $ (/ pfad/zu/anderen/script.sh 2> &1); echo" $ myVar "' ist ein ort zu starten. Viel glück. – shellter

+0

Danke, dass myVar hat den Trick! – user8983691

Antwort

1

Sie könnten '|' wie von beroe in den Kommentaren vorgeschlagen, und das wird die Ausgabe des ersten Skripts als Eingabe für das zweite Skript erhalten, aber es wird nicht mehr im Terminal angezeigt.

Eine andere Option wäre 'tee', die es auch als Eingabe für den Rest des Skripts geben würde, während es immer noch im Terminal angezeigt wird.

0

Wenn Sie den Ausgang des anderen Skript Zeile-für-Zeile lesen möchten, können Sie tun,

/path/to/other/script.sh 2>&1 | while IFS= read -r line; do 
    do_something_with "$line" 
    # ... 
done 

viele gute Informationen über bash Es ist hier: https://stackoverflow.com/tags/bash/info

0

Sie fragen etwa command substitution, eine Syntax in Bash und anderen Shell-Sprachen, mit denen Sie die Standardausgabe einer Befehlspipeline erfassen können.

Zum Beispiel wird dies die Ausgabe von date erfassen und dann als Teil einer größeren Zeichenfolge ausgeben.

the_date=$(date) 
echo "The current date is ${the_date}. What a time to be alive!" 

Sie könnten sogar die variable Zuordnung, überspringen und den Befehl Substitution rechts in der Zeichenfolge setzen:

echo "The current date is $(date). What a time to be alive!"