diff Aşağıdaki kodu kullanarak "Dosyalar / bin / bash ve / bin / sh fark" mesajı dışında çıktıyı tamamen bastırabilir.
file1="./helloworld$x.out"
file2="./output/helloworld$x.out"
if diff -q "$file1" "$file2"; then
echo "Passed $x"
else
echo "Failed $x"
fi
Bu mesajı bile gizlemek istiyorsan > /dev/null, çıktısını gizlemek için diff komutundan sonra eklemelisin diff:
if diff -q "$file1" "$file2" >/dev/null; then
/dev/null karadelik görevi gören özel bir dosyadır, eğer yazarsanız, gider, ondan okuyorsanız, hiçbir şey geri alamazsınız.
Bash'ın ;satır sonlandırmasına gerek olmadığını unutmayın .
Orijinal soruya gelince, bir programın çıktısını bir değişkene kaydetmek için:
file1="./helloworld$x.out"
file2="./output/helloworld$x.out"
output="$(diff -q "$file1" "$file2")"
# the quotes are mandatory, this checks whether $output is empty or not
if [ -n "$output" ]; then
echo "Passed $x"
else
echo "Failed $x"
fi
Bir değişkenin boş olup olmadığını kontrol etmenin alternatif yolları:
[ "$output" = "" ]
[ "$output" == "" ]
[[ "$output" == "" ]]
[[ $output == "" ]]
Bash kullanıyorsanız, dize karşılaştırması için son iki komut önerilir. Aksi takdirde, ilk ve [ -n "$output" ]tavsiye edilir.
... > /dev/nullbu bağlamda ne yaptığını anlamıyorum . Diff çıktısı goto / dev / null olacaktır, fakat hiçbir şey olmaz mı?