Sie haben dies nicht in Ihrer Frage angegeben, aber ich vermute, Sie haben eine Datei mit dem Schlüsselwort, z. Datei cmdfile
, die x-g301
enthält. Und dann führen Sie Ihr Skript wie:
./script "input_file" "output_file" < cmdfile
Wenn ja, der erste grep
Befehl wird die gesamte cmdfile
auf stdin
verbrauchen, während für das erste Muster suchen, und nichts wird für das zweite grep
gelassen werden. Deshalb erzeugt das zweite grep
und dann Ihr zweites Skript keine Ausgabe.
Es gibt viele Möglichkeiten, dies zu beheben, aber die Wahl der richtigen hängt davon ab, was genau Sie versuchen, und wie sieht das cmdfile
aussehen. Unter der Annahme, das ist eine größere Datei mit anderen Dingen als nur die Befehlsmuster, können Sie diese Datei als drittes Argument an das Skript übergeben, wie folgt aus:
./script "input_file" "output_file" "cmdfile"
und haben Ihr Skript es so handhaben:
#!/bin/bash
input_file="$1"
output_file="$2"
cmdfile="$3"
if grep -q "X-G303" "$cmdfile"; then
awk -f ./mno/script.awk "$input_file" > t1.json
fi
if grep -q "x-g301" "$cmdfile"; then
sh ./mno/tm.sh "$input_file" > t2.json
fi
Hier nehme ich auch an, dass Ihre awk
und sh
Skripts nicht wirklich die Ausgabe von grep
benötigen, da Sie ihnen den Namen der Eingabedatei geben.
Beachten Sie, dass die richtige Verwendung von grep
für die Existenzsuche über den Exitcode (und den stummgeschalteten Ausgang mit -q
) erfolgt. Anstelle der if
hätten wir Shortcircuit (grep ... && awk ...
) verwenden können, aber dieser Weg ist wahrscheinlich besser lesbar.
Ihre 'grep' Befehle werden nicht an eine Datei übergeben, daher sollten diese Befehle unbestimmt blockieren, während' grep' 'stdin' verarbeitet. Außerdem ist '|' kein "oder" -Befehl, es ist eine Pipe, die das output des Befehls auf der linken Seite zur Eingabe des Befehls auf der rechten Seite sendet, und es ist wahrscheinlich nützlich, uns die tatsächliche Shell zu zeigen, die Sie verwenden anstelle von '(shell)', obwohl das 'bash'-Tag wahrscheinlich eine gute Ahnung ist –
Danke, dass Sie das bemerkt haben. Ich habe es korrigiert und es funktioniert! –