Pertanyaan ini dibahas di BashFAQ/032. Dalam contoh Anda, Anda akan:
{ time sleep 1; } 2> /dev/null
Alasan mengapa
time sleep 1 2>/dev/null
tidak berperilaku seperti yang Anda harapkan karena dengan sintaks itu, Anda ingin time
perintah sleep 1 2>/dev/null
(ya, perintah sleep 1
dengan stderr dialihkan ke /dev/null
). time
bawaan bekerja seperti itu untuk membuat ini benar-benar mungkin.
bash
bawaan benar-benar dapat melakukan ini karena ... yah, ini bawaan. Perilaku seperti itu tidak mungkin dilakukan dengan perintah eksternal time
biasanya terletak di /usr/bin
. Memang:
$ /usr/bin/time sleep 1 2>/dev/null
$
Sekarang, jawaban atas pertanyaan Anda
Mengapa output dari beberapa program linux tidak menuju ke STDOUT atau STDERR?
adalah:ya, output menuju ke stdout atau stderr .
Semoga ini bisa membantu!
Pertanyaan khusus Anda tentang time
builtin sudah dijawab, tapi ada ada beberapa perintah yang tidak ditulis ke stdout
atau ke stderr
. Contoh klasiknya adalah perintah Unix crypt
. crypt
tanpa argumen mengenkripsi input standar stdin
dan menuliskannya ke output standar stdout
. Itu meminta pengguna untuk kata sandi menggunakan getpass()
, yang secara default menampilkan prompt ke /dev/tty
. /dev/tty
adalah perangkat terminal saat ini. Menulis ke /dev/tty
memiliki efek menulis ke terminal saat ini (jika ada, lihat isatty()
).
Alasan crypt
tidak dapat menulis ke stdout
karena ia menulis hasil terenkripsi ke stdout
. Selain itu, sebaiknya prompt ke /dev/tty
alih-alih menulis ke stderr
sehingga jika pengguna mengalihkan stdout
dan stderr
, prompt masih terlihat. (Untuk alasan yang sama, crypt
tidak dapat membaca kata sandi dari stdin
, karena digunakan untuk membaca data yang akan dienkripsi.)