Das funktioniert:
if diff "./helloworld$x.out" "./output/helloworld$x.out"> / dev / null; dann
echo "Passed $ x";
sonst
echo "Failed $ x";
fi
Wenn Sie stattdessen eine Variable verwenden, können echo
Sie die else
Verzweigung löschen: Setzen Sie die Variable vor dem auf false if
und speichern Sie 2 Codezeilen.
Wenn Sie das Ergebnis tatsächlich in eine Variable einfügen möchten, verwenden Sie:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Einschließlich meines Tests, um zu sehen, ob es tatsächlich funktioniert:
rinzwind @ discworld: ~ $ touch 1
rinzwind @ discworld: ~ $ touch 2
rinzwind @ discworld: ~ $ mehr test
if diff 1 2> / dev / null; dann
echo "Passed $ x";
sonst
echo "Failed $ x";
fi
rinzwind @ discworld: ~ $ ./test
Bestanden
rinzwind @ discworld: ~ $ vi 2
rinzwind @ discworld: ~ $ more 2
2
rinzwind @ discworld: ~ $ ./test
Gescheitert
Zum >/dev/null
Teil: >/dev/null 2>&1
Sendet die Ausgabe an dieselbe Datei >/dev/null
und 2>&1
sendet Standardfehler an dieselbe Datei ( &1
bedeutet 'Erste Parameter verwenden') vor diesem Befehl (wird also auch verwendet /dev/null
).
Nebenbemerkung: Zeigt sdiff
eine diff
Liste nebeneinander an :
sdiff 1 2
1 1
2 2
3 3
4 4
5 5
7 7
> 8
9 9
10 10
... > /dev/null
in diesem Zusammenhang tut. Die Ausgabe von diff wird nach / dev / null gehen, aber ist das nicht nichts?diff
Die Ausgabe kann sogar vollständig unterdrückt werden, mit Ausnahme der Meldung "Dateien / bin / bash und / bin / sh unterscheiden", die den folgenden Code verwendet.Wenn Sie diese Nachricht sogar ausblenden möchten, müssen Sie
> /dev/null
nach dem Befehl diff Folgendes anfügen , um die Ausgabe vondiff
:/dev/null
ist eine spezielle Datei, die als Schwarzes Loch fungiert. Wenn Sie darauf schreiben, ist sie verschwunden. Wenn Sie davon lesen, erhalten Sie nichts zurück.Beachten Sie, dass bash keine
;
Zeilenenden benötigt.Wie für die ursprüngliche Frage, um die Ausgabe eines Programms in einer Variablen zu speichern:
Alternative Möglichkeiten, um zu überprüfen, ob eine Variable leer ist:
Wenn Sie Bash verwenden, werden die letzten beiden Befehle für den Zeichenfolgenvergleich empfohlen. Ansonsten ist das erste und
[ -n "$output" ]
empfohlen.quelle
a) Die Ausgabe von command1 kann mit abgefangen werden
oder mit Backticks, aber von diesen wird abgeraten, da Sie sie nicht verschachteln können und sie je nach Schriftart schwer von Apostrophen zu unterscheiden sind:
b) Anstatt in eine Datei zu schreiben und diese dann zu lesen (oder die Ausgabe zu erfassen und dann zu wiederholen), würden Sie eine Pipe direkt verwenden:
=>
Aber in Ihrem Beispiel interessiert Sie nicht die Ausgabe, sondern das Ergebnis des Programms - hat es funktioniert?
Lesen Sie mehr über die Verwendung von && und || Suche nach "Verknüpfung UND und Verknüpfung ODER".
Um die Ausgabe sauber zu halten, können Sie die Ausgabe von 'diff' an einen anderen Ort umleiten:
Um Erfolg zu haben und ihn später auszuwerten, speichern Sie das Ergebnis des letzten Befehls in einer Variablen mit $ ?:
quelle
Wenn Sie wissen möchten, ob zwei Dateien identisch oder unterschiedlich sind (es ist jedoch egal, was der Unterschied tatsächlich ist),
cmp
ist dies besser geeignet.quelle