Hanya mencari perbedaan antara
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
dan portabilitasnya dengan shell non-Bourne seperti tcsh
, mksh
, dll.
Jawaban yang Diterima:
Untuk latar belakang:
- sebuah nomor 1 =keluaran standar (yaitu STDOUT)
- sebuah nomor 2 =kesalahan standar (yaitu STDERR)
- jika suatu angka tidak diberikan secara eksplisit, maka angka 1 diasumsikan oleh shell (bash)
Pertama mari kita bahas fungsi dari ini. Untuk referensi, lihat Panduan Pembuatan Skrip Bash Tingkat Lanjut.
Fungsi
2>&-
Bentuk umum dari yang satu ini adalah M>&-
, di mana “M” adalah nomor deskriptor file. Ini akan menutup output untuk deskriptor file mana pun yang dirujuk, yaitu “M” .
2>/dev/null
Bentuk umum dari yang satu ini adalah M>/dev/null
, di mana “M” adalah nomor deskriptor file. Ini akan mengalihkan deskriptor file, “M” , ke /dev/null
.
2>&1
Bentuk umum dari yang satu ini adalah M>&N
, di mana “M” &“T” adalah nomor deskriptor file. Ini menggabungkan output dari deskriptor file “M” dan “N” menjadi satu aliran.
|&
Ini hanya singkatan dari 2>&1 |
. Itu ditambahkan di Bash 4.
&>/dev/null
Ini hanya singkatan dari >/dev/null 2>&1
. Ini mengarahkan deskriptor file 2 (STDERR) dan deskriptor 1 (STDOUT) ke /dev/null
.
>/dev/null
Ini hanya singkatan dari 1>/dev/null
. Ini mengarahkan deskriptor file 1 (STDOUT) ke /dev/null
.
Portabilitas ke non-bash, tcsh, mksh, dll.
Saya tidak banyak berurusan dengan shell lain di luar csh
dan tcsh
. Pengalaman saya dengan 2 itu dibandingkan dengan operator pengalihan bash, adalah bahwa bash lebih unggul dalam hal itu. Lihat halaman manual tcsh untuk detail lebih lanjut.
Dari perintah yang Anda tanyakan tidak ada yang secara langsung didukung oleh csh/tcsh. Anda harus menggunakan sintaks yang berbeda untuk membuat fungsi serupa.