Saya biasanya akan merekomendasikan mengikuti cara Bourne-again SHell dalam melakukan sesuatu, karena bash bisa dibilang shell Unix paling populer di luar sana. Bash biasanya menggunakan salah satu &>
atau 2>&1
. IMHO, tidak ada yang "sempurna", jadi saya sarankan melupakan omong kosong itu. Secara realistis, yang mana yang harus Anda gunakan tergantung pada apa yang Anda coba lakukan.
2>&1
menggabungkan stderr dengan stdout, yang dapat berguna jika, misalnya, Anda ingin mem-pipe teks stderr. Jadi, misalnya, jika Anda ingin melihat apakah suatu program mencetak pesan stderr tertentu, tetapi tidak ingin layar Anda diisi dengan (mungkin) sampah yang tidak penting, Anda dapat melakukan sesuatu seperti program 2>&1 | grep crashed
, yang akan mencari stdout dan stderr dari suatu program disebut "program" untuk kata "crash".
Di sisi lain, jika Anda tidak ingin program untuk mencetak apa pun, Anda bisa menjalankannya program &> /dev/null
, yang akan mengarahkan ulang stderr dan stdout ke / dev / null, file khusus yang secara ajaib membuat semuanya hilang. Atau, jika Anda ingin menyimpan output dari suatu program (mungkin untuk melaporkan bug atau sesuatu), Anda bisa mengarahkan ulang stderr dan stdout ke file: program &> log.txt
akan mengarahkan semua data ke file yang disebut "log.txt". Jika Anda mau, Anda bisa mengarahkan stdout dan stderr melalui program 2> log.txt > log.txt
atau program 2>&1 | cat > log.txt
, keduanya akan memiliki efek yang sama seperti menggunakan &>
. Jika Anda melakukan sesuatu seperti program 2>&1 > file
, hanya stdout yang akan diarahkan, tetapi stderr masih dapat disalurkan ke program lain, seperti cat, yang dapat diarahkan seperti yang ditunjukkan di atas. Namun, mengetik&>
lebih mudah daripada contoh-contoh di atas, karena itu melibatkan mengetik lebih sedikit karakter (dan itu agak lebih mudah bagi manusia untuk membaca). Perhatikan bahwa program 2> log.txt > log.txt
mungkin lebih baik bekerja pada cangkang non-bash.
PS: jika Anda khawatir tentang orang yang menggunakan kerang lain, ada sesuatu yang dapat Anda tambahkan untuk menjadi baris pertama dari skrip Anda yang disebut "angka ajaib", atau "shebang". Ini pada dasarnya adalah cara untuk memastikan komputer lain (terutama yang menjalankan sistem operasi mirip Unix) tahu program mana yang digunakan untuk menjalankan skrip. Script yang berbeda menggunakan shebang yang berbeda. Shebang untuk skrip bash terlihat seperti ini:
#!/bin/bash
Jika Anda menggunakan di atas sebagai baris pertama skrip yang diberikan, bash umumnya akan digunakan untuk mengeksekusi skrip tersebut. Ini akan membuat jauh lebih sulit bagi seseorang untuk secara tidak sengaja mengeksekusi skrip dengan shell yang salah.
PS: Saya tidak akan berbohong: sampai sekarang, saya tidak tahu ada yang bisa menggunakan >&
, tetapi sejauh menyangkut bash, sepertinya melakukan hal yang sama &>
. Anda belajar sesuatu yang baru setiap hari.