Terkadang Anda ingin mengarahkan stdout dan stderr ke lokasi yang sama, Ini saat >&digunakan - ini mengarahkan satu deskriptor file ke yang lain.
Misalnya, jika Anda ingin menulis kedua stdout dan stderr ke file yang sama (baik itu /dev/nullatau output.txt), Anda dapat mengarahkan mereka secara terpisah, dengan
app 1>/dev/null 2>/dev/null
atau Anda bisa mengarahkan satu deskriptor file ke file, dan deskriptor file lainnya ke yang pertama:
app 1>/dev/null 2>&1
app 2>/dev/null 1>&2
Dalam contoh pertama, 2>&1arahkan file descriptor # 2 ke tempat # 1 sudah menunjuk. Contoh kedua mencapai hal yang sama, hanya mulai dengan stderr saja.
Sebagai contoh lain, ada beberapa kasus ketika stdout (deskriptor file # 1) sudah menunjuk ke lokasi yang diinginkan, tetapi Anda tidak dapat merujuknya dengan nama (mungkin terkait dengan pipa, soket, atau semacamnya). Ini sering terjadi ketika menggunakan ekspansi proses ( ` `atau $( )operator), yang biasanya hanya menangkap stdout, tetapi Anda mungkin ingin menyertakan stderr di dalamnya. Dalam hal ini, Anda juga akan menggunakan >&untuk mengarahkan stderr ke stdout:
out=$(app 2>&1)
Contoh umum lainnya adalah pager, atau grep, atau utilitas serupa, karena pipa |biasanya hanya bekerja di stdout, Anda akan mengarahkan stderr ke stdout sebelum menggunakan pipa:
app 2>&1 | grep hello
Bagaimana tahu mana 2>&1atau 1>&2benar? The sudah menyiapkan file descriptor pergi ke kanan >&, dan file descriptor Anda ingin redirect pergi ke kiri. ( 2>&1berarti "titik file descriptor # 2 ke file descriptor # 1".)
Beberapa shell memiliki jalan pintas untuk pengalihan umum; berikut adalah contoh dari Bash:
1> dapat disingkat menjadi adil >
1>foo 2>&1ke >&fooatau&>foo
2>&1 | program untuk |& program
app 1>/dev/null 2>&1berarti 2> & 1 akan menunjuk ke file yang sudah saya alihkan. Saya mengambilnya, saya bisa dengan mudah melakukannyaapp > /dev/null &>?