tl; dr: brauchen eine Möglichkeit, (mit grep) eine Ausgabe in subshell und AND umleiten alle ursprünglichen Ausgabe auf die wichtigsten stdout/stderr zur gleichen Zeit. Ich suche nach Shell-unabhängigen (!) Weg.Redirect Ausgabe von Subshell und Verarbeitung durch Rohr zur gleichen Zeit
Im Detail
Es ist eine proprietäre binäre, die ich für einen Wert grep wollen
Die proprietäre binäre von Zeit zu Zeit interaktiv sein könnte nach einem Passwort fragen (abhängig auf der internen Logik)
Ich möchte die Ausgabe der binären ANZEIGEN grep und will in der Lage sein, das Passwort einzugeben, das benötigt wird, um fortzufahren
Also das Skript, das meine Aufgabe erreicht werden soll, könnte wie folgt aussehen:
#!/bin/sh
user_id=... # some calculated value
list_actions_cmd="./proprietary-binary --actions ${user_id}"
action_item=$(${list_actions_cmd} | grep '^Main:')
Hier proprietary-binary
ein Passwort durch stdin
fragen könnte. Da subshell innerhalb von $()
die gesamte Ausgabe abfängt, wird ein Endbenutzer nicht verstehen, dass der list_actions_cmd
auf Eingabe wartet. Was ich will, ist, entweder alle Ausgaben von list_action_cmd
AND grepping gleichzeitig anzuzeigen oder zumindest das Schlüsselwort zu erfassen, dass der Benutzer nun nach einem Passwort gefragt wird und ihn darüber informiert.
Zeit, was ich herausgefunden ist tee
die Ausgabe und grep gibt:
#!/bin/sh
user_id=... # some calculated value
list_actions_cmd="./proprietary-binary --actions ${user_id}"
$list_actions_cmd 2>&1 | tee /tmp/.proprietary-binary.log
action_item=$(grep "^Main" /tmp/.proprietary-binary.log)
Aber ich frage mich ist es eine elegante Schale unabhängige (nicht bash beschränkt, die sehr mächtig ist) Lösung ohne Zwischen temporäre Datei? Vielen Dank.
Sie lesen sollten [Bash FAQ 050] (http://mywiki.wooledge.org/BashFAQ/050). – chepner
@chepner, wie Lesen würde mir mit dem Problem helfen? "Reading FAQ" könnte eine universelle Antwort für alle Fragen sein. Ich habe dort nachgesehen, aber kein Muster gefunden, um meine Frage zu lösen. – nebd
Es beantwortet Ihre Frage nicht. Es erklärt, warum 'list_actions_cmd =" ... "' der falsche Ansatz ist. – chepner