Ich möchte überprüfen, die Ausgabe von grep
Befehl piped zu einem anderen Befehl. In meiner vorherigen question wurde PIPESTATUS vorgeschlagen, aber jetzt sehe ich, dass es nicht für alle Bedingungen funktioniert. Egal, was die Ausgabe von grep
(Übereinstimmung oder Unmatch) ist, gibt PIPESTATUS
0 zurück, was seltsam ist.Überprüfen der Ausgabe eines piped Grep
Das Skript enthält
GF=`grep g09 $INP | cut -d ' ' -f2`
if [ ${PIPESTATUS[0]} = 1 ]; then
Grundsätzlich ist der erste Befehl sucht nach g09
in der Eingabedatei. Wenn es nicht existiert, sollte der PIPESTATUS 1
sein.
Jetzt set -x
in dem Bash-Skript verklagt, ich sehe, dass für eine Eingabedatei, die g09 enthält, wird der Ausgang 0 ist und für eine Eingabe, die in ihm keine g09 hat, ist der Ausgang noch 0
++ grep g09 tor.sh
++ cut -d ' ' -f2
+ GF=hashe.gjf
+ '[' 0 = 1 ']'
und
Warum? Wie kann ich das beheben? Gibt es eine andere Lösung als PIPESTATUS?
Bitte fügen Sie den vollständigen Code ein. – codeforester
Wie Sie in der Ausgabe von 'set -x' sehen können, handelt es sich um eine Eingabedatei' tor.sh'. Es gibt zwei 'tor.sh' in zwei verschiedenen Verzeichnissen. Der vollständige Code ist möglicherweise groß, aber ich werde den Post aktualisieren – mahmood
Die Backticks führen Ihre Befehle in einem separaten Prozess aus, weshalb die Umgebungsvariable für Ihr aufrufendes Skript nicht mehr verfügbar ist. –