memahami urutan pengalihan

8

Jika beberapa pengalihan digunakan bersama-sama, apakah mengubah urutan membuat perbedaan?

Bagaimana orang bisa memahami arti pesanan mereka? Apakah saluran redirect dirantai dibangun sebagai membaca pengalihan dari kiri ke kanan, atau dari kanan ke kiri?

Sebagai contoh

command 2>&1 > somefile

command > somefile 2>&1

Terima kasih dan salam!

Tim
sumber

Jawaban:

7

Ya, pesanan membuat perbedaan, dan harus dibaca dari kiri ke kanan.

command 2>&1 >somefileartinya mengarahkan redder stderr (2) ke tujuan stdout (terminal) saat ini. Kemudian ganti stdout untuk menuju somefile. Jadi stderr pergi ke terminal, dan stdout pergi ke file.

command >somefile 2>&1artinya untuk mengarahkan ulang stdout ke somefile, dan kemudian untuk mengarahkan ulang stderr ke tujuan yang sama dengan stdout (file). Jadi stderr dan stdout pergi ke somefile.

Ini dijelaskan di bagian 3.6 dari manual Bash: Pengalihan .

cjm
sumber
1
man bash 

mengatakan:

REDIRECTION Sebelum perintah dijalankan, input dan outputnya dapat dialihkan menggunakan notasi khusus yang ditafsirkan oleh shell. Pengarahan ulang juga dapat digunakan untuk membuka dan menutup file untuk lingkungan eksekusi shell saat ini. Operator pengalihan berikut ini dapat mendahului atau muncul di mana saja dalam perintah sederhana atau dapat mengikuti perintah. Pengalihan diproses sesuai urutan kemunculannya, dari kiri ke kanan.

dan

Perhatikan bahwa urutan pengalihan signifikan. Misalnya, perintahnya

ls > dirlist 2>&1

mengarahkan output standar dan kesalahan standar ke file dirlist, sementara perintah

ls 2>&1 > dirlist

mengarahkan hanya output standar ke dirlist file, karena kesalahan standar diduplikasi dari output standar sebelum output standar dialihkan ke dirlist.

Pengguna tidak diketahui
sumber