Bagaimana cara mengganti opsi bash “noclobber”?

17

The bash noclobberpilihan mencegah salah satu dari Timpa file dengan pengalihan. Tetapi terkadang saya benar-benar ingin. cshmemiliki opsi serupa dan dapat dikalahkan dengan meletakkan !sebelum nama file. Apakah ada cara untuk melakukan ini bash?

ay32
sumber

Jawaban:

19

Iya. Tambahkan |ke operator pengalihan untuk membentuk >|. Ini ada dalam § 3.6.2 dari Manual Referensi Bash , qv

Jika operator pengalihan adalah '>', dan opsi noclobber ke set builtin telah diaktifkan, pengalihan akan gagal jika file yang namanya hasil dari perluasan kata ada dan merupakan file biasa. Jika operator redirection adalah '> |', atau operator redirection adalah '>' dan opsi noclobber tidak diaktifkan, redirection dicoba bahkan jika file bernama dengan kata ada.

Kunjungi tutorial ini tentang opsi noclobber . Mungkin bisa membantu.

JdeBP
sumber
3

Gunakan |("pipa") di bash, bukan !("bang") seperti yang Anda lakukan csh. Sebagai contoh:

echo done >| out

Catatan bahwa jika Anda ingin mengarahkan stderrke stdout dan menimpa noclobber, baik >|&atau &>|akan bekerja; gunakan formulir panjang sebagai gantinya:

cmd-with-errors done >| out 2>&1
Turvalar
sumber
Apakah Anda tahu mengapa err &>| outtidak berhasil?
Sanghyun Lee