Katakanlah saya menjalankan perintah atau skrip shell, dan itu memberi saya output. Tanpa mengetahui internal dari perintah atau skrip shell ini, bagaimana cara menentukan apakah outputnya berasal dari stderr atau stdout ?
Misalnya,
$ ls -ld /
drwxrwxr-t 35 root admin 1258 Dec 11 19:16 /
vs
ls -ld /test
ls: /test: No such file or directory
Bagaimana cara memastikan bahwa perintah pertama dicetak ke stdout dan yang kedua ke stderr (berhasil?)?
Jawaban yang Diterima:
Tidak ada cara untuk mengetahui setelah output telah dicetak. Dalam hal ini, keduanya stdout dan stderr terhubung ke terminal, sehingga informasi tentang aliran mana yang ditulis sudah hilang pada saat teks muncul di terminal Anda; mereka digabungkan oleh program sebelum sampai ke terminal.
Apa yang dapat Anda lakukan, dalam kasus seperti di atas, adalah menjalankan perintah dengan stdout dan stderr diarahkan ke tempat yang berbeda dan melihat apa yang terjadi. Atau jalankan dua kali, sekali dengan stdout dialihkan ke /dev/null dan sekali dengan stderr dialihkan ke /dev/null , dan lihat kasus mana yang menghasilkan teks yang muncul.
Anda dapat mengalihkan stdout ke /dev/null dengan menempelkan >/dev/null di akhir baris perintah, dan Anda dapat mengarahkan stderr ke /dev/null dengan menambahkan 2>/dev/null .