Bertukar stdoutdan stderr.
>nameberarti mengarahkan output ke file name.
>&numberberarti redirect output ke file descriptor number.
Jadi &diperlukan untuk memberitahu shell maksud Anda deskriptor file, bukan nama file.
Deskriptor file adalah angka yang merujuk ke file yang sudah terbuka. Yang standar adalah 0untuk input standar, 1untuk output standar atau 2untuk kesalahan standar. Anda juga dapat menggunakan nomor lain, yang akan membuat deskriptor file baru, seperti saat Anda membuat variabel baru dengan var=value.
Secara default, kedua file descriptor 1dan 2pergi ke /dev/tty, jadi jika Anda menjalankan somecommand 3>&1 1>&2 2>&3shell baru, itu tidak mengubah apa pun (kecuali sekarang Anda memiliki file deskriptor nomor 3).
Tetapi jika suatu tempat sebelumnya dalam skrip melakukan pengalihan menggunakan exec (misalnya exec 2>error.log), atau skrip dijalankan dengan baris perintah termasuk pengalihan (mis. ./thescript 2>error.log), Maka swapping stdout dan stderr akan melakukan sesuatu.
Dalam kasus spesifik Anda, perintah yang mengganti stdout dan stderr adalah dialog. Melihat halaman manualnya , saya mengerti
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
jadi mungkin orang yang menulis skrip itu ingin dialogkeluaran stdoutbukan stderrkarena alasan tertentu.
Lihat juga Urutan pengalihan