Chcę przetestować, czy jest jakieś wyjście z diff
(sprawdź, czy pliki są takie same), jeśli nie ma echo "Passed $x" else echo "Failed $x"
. Wpadłem na jakiś krok pośredni (zapisz dane wyjściowe z pliku diff do pliku, a następnie przeczytaj plik)
diff "./helloworld$x.out" "./output/helloworld$x.out" > tmp.txt;
output="`cat tmp.txt`";
if [ "$output" = "" ];
then
echo "Passed $x";
else
echo "Failed $x";
fi;
Jestem pewien, że kod można poprawić? Główne pytanie brzmi: czy można zapisać dane wyjściowe diff
bezpośrednio w zmiennej?
... > /dev/null
robi w tym kontekście. Wyjście diff będzie goto / dev / null, ale czy to nic?diff
może nawet całkowicie wyłączyć dane wyjściowe, z wyjątkiem komunikatu „Pliki / bin / bash i / bin / sh różnią się” za pomocą poniższego kodu.Jeśli nawet chcesz ukryć tę wiadomość, musisz dołączyć
> /dev/null
po poleceniu diff, aby ukryć wynikdiff
:/dev/null
to specjalny plik, który działa jak blackhole, jeśli do niego napiszesz, zniknie, jeśli z niego czytasz, nic nie odzyskasz.Zauważ, że bash nie musi
;
kończyć linii.Jeśli chodzi o oryginalne pytanie, aby zapisać dane wyjściowe programu w zmiennej:
Alternatywne sposoby sprawdzenia, czy zmienna jest pusta:
Jeśli używasz Bash, do porównania ciągów zalecane są dwa ostatnie polecenia. W przeciwnym razie pierwszy i
[ -n "$output" ]
jest zalecany.źródło
a) Dane wyjściowe polecenia 1 można złapać
lub z backtickami, ale są one odradzane, ponieważ nie można ich zagnieżdżać i mogą być trudne do odróżnienia od apostrofów, w zależności od czcionki:
b) Zamiast zapisywać do pliku, a następnie czytać ten plik (lub pobierać dane wyjściowe, a następnie je echo), użyłbyś potoku bezpośrednio:
=>
ale w twoim przykładzie nie interesuje Cię wynik, ale wynik programu - czy to zadziałało?
Aby przeczytać o użyciu && i || wyszukaj „skrót AND i skrót OR”.
Aby utrzymać wyjście w czystości, możesz przekierować wyjście „diff” do nikąd:
Aby złapać sukces i ocenić go później, przechowujesz wynik ostatniego polecenia w zmiennej z $ ?:
źródło
Jeśli chcesz wiedzieć, czy dwa pliki są takie same lub różnią się (ale nie obchodzi, co to właściwie jest różnica),
cmp
bardziej odpowiednie.źródło