Saya tidak begitu mengerti bagaimana komputer membaca perintah ini.
cat file1 file2 1> file.txt 2>&1
Jika saya mengerti, 2>&1
cukup arahkan Kesalahan Standar ke Output Standar.
Dengan logika itu, perintah itu berbunyi bagi saya sebagai berikut:
menggabungkan file
file1
danfile2
.kirim
stdout
dari operasi ini kefile.txt
.kirim
stderr
kestdout
.akhir?
Saya tidak yakin apa yang dilakukan komputer. Menurut logika saya, seharusnya perintah itu
cat file1 file2 2>&1 > file.txt
tetapi ini tidak benar.
sumber
$
?var=$othervar
,$
perkenalkan nama variabel di sisi kanan. Dalam pengalihan seperti2>&1
,&
memperkenalkan nomor deskriptor file di sisi kanan. Saya mengatakan Anda dapat menganggapnya seperti "file 2 sama dengan file 1". (Tapi ada dua jenis yang sama:<
berarti "untuk membaca" dan>
berarti "untuk menulis".)Urutan pengalihan penting, dan harus dibaca dari kiri ke kanan .
Sebagai contoh:
command 2>&1 >somefile
berarti:stderr
(yaitu2
) ke tujuan saat inistdout
(pada titik ini, terminal).stdout
untuk pergi kesomefile
.Jadi dalam hal ini,
stderr
pergi ke terminal, danstdout
pergi ke file, yang bukan apa yang Anda inginkan.Di sisi lain,
command >somefile 2>&1
berarti:stdout
kesomefile
stderr
ke tujuan yang sama denganstdout
(somefile
).Dalam kasus terakhir ini keduanya
stderr
danstdout
pergi kesomefile
, yang mungkin apa yang Anda inginkan.sumber
>&
Sebenarnya berarti duplikat, ia menggunakan panggilan sistem dup untuk memetakan deskriptor file baru ke file yang sudah dibuka.Jadi, Anda (sebenarnya bash) harus terlebih dahulu membuka stdout baru sebelumnya, dengan mengatakan "dan mengarahkan stderr ke stdout apa pun yang saat ini disetel."
sumber
&
. dapatkah Anda menyertakan beberapa referensi ke sintaks itu, atau - lebih baik lagi - beberapa sumber yang bagus pada sistem dup yang disebutkan di atas?