Bagaimana perintah seperti ls
tahu apa itu stdout?
Tampaknya ls
beroperasi berbeda tergantung pada apa target stdout. Sebagai contoh jika saya lakukan:
ls /home/matt/tmp
hasilnya adalah:
a.txt b.txt c.txt
Namun jika saya lakukan
ls /home/matt/tmp | cat
hasilnya adalah (yaitu baris baru per hasil):
a.txt
b.txt
c.txt
Proses ini melewati file deskriptor 1 untuk stdout kan? Bagaimana cara menentukan cara memformat hasil? Apakah deskriptor file mengungkapkan informasi?
command-line
io-redirection
ls
tty
Pak Freman
sumber
sumber
Jawaban:
Itu
ls
penggunaan Programisatty()
untuk mengetahui apakah fd 1 adalah tty atau sesuatu yang lain (pipa, berkas, dll ...). Dariman 3 isatty
:Pembaruan: Baris 1538 masuk
ls.c
dari coreutils (revisi git 43a987e1):(
many_per_line
harus deskriptif diri.)sumber
Bukan jawaban yang pasti tetapi sebuah contoh. Dalam naskah Bash Anda dapat mencapai efek yang sama dengan
test
/[[
's-t
:Menggunakannya seperti ini:
sumber
Dari
ls(1)
manual OpenBSD :Kemudian, nanti:
[...]
sumber
Anda dapat mengeksekusi
ls
di pseudo-terminal menggunakanscript
perintah, menyalurkan outputls
ke perintah lain dan mendapatkan format output yang sama seolah-olah tidak ada pipa seperti aliran stdout, yaitu seolah-olah stdout adalah terminal (tty).Untuk mendasari
isatty()
mekanisme yang sudah ditunjukkan oleh Stéphane Gimenez melihat ls.c .sumber