Saya ingin menguji apakah ada output dari diff
(uji apakah file sama), jika tidak ada echo "Passed $x" else echo "Failed $x"
. Saya datang dengan beberapa langkah intermidiate (menyimpan output dari diff ke file kemudian membaca dari file)
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;
Saya yakin kode dapat ditingkatkan? Pertanyaan utama adalah: apakah mungkin untuk menyimpan output dari diff
langsung ke variabel?
... > /dev/null
terjadi di konteks ini Output dari diff akan pergi / dev / null tetapi bukankah itu tidak ada?diff
bahkan dapat menekan output sepenuhnya kecuali untuk pesan "File / bin / bash dan / bin / sh berbeda" menggunakan kode di bawah ini.Jika Anda bahkan ingin menyembunyikan pesan itu, Anda harus menambahkan
> /dev/null
setelah perintah diff untuk menyembunyikan output daridiff
:/dev/null
adalah file khusus yang bertindak sebagai lubang hitam, jika Anda menulisnya, itu akan hilang, jika Anda membacanya, Anda tidak akan mendapatkan apa-apa.Perhatikan bahwa bash tidak perlu
;
mengakhiri garis.Adapun pertanyaan asli, untuk menyimpan output suatu program dalam variabel:
Cara alternatif untuk memeriksa apakah suatu variabel kosong:
Jika Anda menggunakan Bash, dua perintah terakhir direkomendasikan untuk perbandingan string. Kalau tidak, yang pertama dan
[ -n "$output" ]
dianjurkan.sumber
a) Output dari command1 dapat ditangkap dengan
atau dengan backtick, tetapi itu tidak disarankan, karena Anda tidak dapat membuat sarang, dan mereka mungkin sulit dibedakan dari apostrof, tergantung pada font:
b) Alih-alih menulis ke file, dan kemudian membaca file itu, (atau mengambil output, dan kemudian menggemakannya) Anda akan menggunakan pipa langsung:
=>
tetapi dalam contoh Anda, Anda tidak tertarik dengan output, tetapi hasil dari program - apakah berhasil?
Untuk membaca tentang penggunaan && dan || cari "shortcut AND dan shortcut OR".
Untuk menjaga output tetap bersih, Anda dapat mengarahkan output 'diff' ke tempat:
Untuk meraih sukses dan mengevaluasinya nanti, Anda menyimpan hasil dari perintah terakhir dalam variabel dengan $ ?:
sumber
Jika Anda ingin tahu apakah dua file itu sama atau berbeda (tetapi tidak peduli apa bedanya sebenarnya),
cmp
lebih cocok.sumber