Bash: Apa yang dilakukan "> |"?


148

Saya baru saja melihat ini ditulis;

$ some-command >| /tmp/output.txt

Pipa vertikal digunakan dalam pengalihan standar "pipa" output dari satu perintah ke yang lain, apakah >|sebenarnya sama sekali tidak berguna karena akan sama dengan hanya >dalam skenario ini?



Untuk sisa gambar, saya sangat merekomendasikan Apa kontrol shell dan operator redirection?
Wildcard

Jawaban:


220

Ini tidak berguna - ini adalah bentuk khusus dari >operator pengalihan polos (dan, mungkin membingungkan, tidak ada hubungannya dengan pipa). bashdan sebagian besar shell modern lainnya memiliki opsi noclobber, yang mencegah pengalihan dari menimpa atau menghancurkan file yang sudah ada. Misalnya, jika noclobberbenar, dan file /tmp/output.txtsudah ada, maka ini harus gagal:

$ some-command > /tmp/output.txt

Namun, Anda dapat secara eksplisit mengesampingkan pengaturan noclobberdengan >|operator pengalihan - pengalihan akan berfungsi, meskipun noclobberdiatur.

Anda dapat mengetahui apakah noclobberdiatur di lingkungan Anda saat ini dengan set -o.

Sebagai catatan sejarah, baik opsi "noclobber" dan fitur pintasnya berasal dari csh(akhir 70-an). kshdisalin (awal 80-an) tetapi digunakan >|sebagai ganti >!. POSIX menentukan kshsintaks (jadi semua shell POSIX termasuk bash, turunan abu yang lebih baru yang digunakan sebagai sh pada beberapa sistem mendukungnya). Zsh mendukung kedua sintaks. Saya tidak berpikir itu ditambahkan ke varian shell Bourne tetapi saya mungkin salah.


3
@sch - ulangi catatan sejarah Anda (terima kasih atas info tambahannya, btw) - FreeBSD shsudah noclobber, sejak sekitar Mei 2002.
D_Bye
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.