> & [FILE_DESCRIPTOR] vs> & operator pengalihan bash file
Saya telah membaca tentang pengalihan bash, dan menemukan dua artikel tentangnya
pertama :
https://www.brianstorti.com/understanding-shell-script-idiom-redirect
menyatakan itu
Anda dapat menggunakan & [FILE_DESCRIPTOR] untuk merujuk nilai deskriptor file;
Namun ketika saya membacanya bersamaan dengan artikel kedua
yang ke dua
https://catonmat.net/bash-one-liners-explained-part-three
itu menyatakan itu
Perhatikan juga bahwa dalam bash, menulis ini:
$ command &>filePersis sama dengan:
$ command >&fileNamun, bentuk pertama lebih disukai.
kenapa >&filemembuat filedeskriptor file
Jawaban
Ini sebenarnya adalah dua operator berbeda yang saling bertentangan, satu dari shell Bourne, satu dari shell C.
cmd >&2
Kependekan dari
cmd 1>&2
Apakah operator Bourne shell yang berjalan cmddengan stdout (fd 1) terhubung ke sumber yang sama ( deskripsi file terbuka yang sama ) seperti pada fd 2 ( x>&y(atau x<&yyang persis sama) mengalihkan fd x ke sumber yang sama seperti pada fd y ).
cmd >& file
Apakah cshoperator C shell ( ) yang berjalan cmddengan fd 1 dan 2-nya terhubung ke deskripsi file terbuka baru yang diperoleh dengan membuka filemode hanya tulis. Dalam sintaks Bourne shell, padanannya adalahcmd > file 2>&1
Mereka melakukan konflik. Mana yang benar-benar digunakan bergantung pada apakah targetnya numerik atau tidak.
Jika Anda memiliki:
cmd >&"$file"
Operator Bourne shell akan digunakan jika $fileberisi urutan angka desimal dan operator C shell akan digunakan sebaliknya!
Itulah mengapa lebih baik menghindari operator csh itu dan > file 2>&1sebagai gantinya gunakan sintaks Bourne shell ( ).
bash(dan zsh) juga memiliki &>operator sebagai alternatif >&, tetapi perhatikan bahwa ini melanggar kepatuhan POSIX seperti cmd &> fileyang dimaksudkan untuk dijalankan cmd &dan kemudian > filedi POSIX sh. Namun tidak ada masalah konflik yang disebutkan di atas.