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.)