GNU/Linux >> Belajar Linux >  >> Linux

Mengapa output dari beberapa program Linux tidak menuju ke STDOUT atau STDERR?

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


Linux
  1. Konfigurasikan Shell Untuk Mencetak Stderr Dan Stdout Dalam Berbagai Warna?

  2. Output Ke Stdout Dan Pada Saat Yang Sama Grep Ke File?

  3. Linux – Bagaimana Cara Memeriksa Informasi Struktur Direktori File Unix/linux?

  1. Mengapa Waktu Unix Mulai Pada 1970-01-01?

  2. Linux – Mengapa Rsync Di Linux Tidak Mempertahankan Semua Stempel Waktu (Waktu Pembuatan)?

  3. Contoh Perintah Waktu Linux

  1. Bagaimana cara mengarahkan output dari perintah waktu ke file di Linux?

  2. Tambahkan beberapa waktu tertentu saat menggunakan tanggal perintah linux

  3. Mengapa pr_debug dari kernel Linux tidak memberikan hasil apa pun?