Alasannya noclobber
tidak diatur secara default adalah tradisi. Sebagai masalah desain antarmuka pengguna, merupakan ide yang baik untuk membuat "buat file baru ini" tindakan yang mudah dan untuk menempatkan rintangan ekstra tindakan yang lebih berbahaya "baik membuat file baru atau menimpa file yang sudah ada". Maka itu noclobber
adalah ide yang baik ( >
untuk membuat file baru, >|
untuk berpotensi menimpa file yang sudah ada) dan kemungkinan akan menjadi default jika shell telah dirancang beberapa dekade kemudian.
Saya sangat menyarankan untuk menggunakan yang berikut ini di file startup shell interaktif Anda ( .bashrc
atau .zshrc
):
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
Dalam setiap kasus (pengalihan, penyalinan, pemindahan), tujuannya adalah untuk menambahkan rintangan tambahan ketika operasi mungkin memiliki efek samping menghapus beberapa data yang ada, meskipun menghapus data yang ada bukanlah tujuan utama operasi. Saya tidak memasukkan rm -i
daftar ini karena menghapus data adalah tujuan utama rm
.
Perhatikan itu noclobber
dan -i
merupakan jaring pengaman . Jika mereka memicu, Anda telah melakukan kesalahan . Jadi jangan gunakan itu sebagai alasan untuk tidak memeriksa apa yang Anda timpa! Intinya adalah Anda harus memeriksa bahwa file output tidak ada. Jika Anda diberitahu file exists: foo
atau overwrite 'foo'?
, itu berarti Anda melakukan kesalahan dan Anda harus merasa buruk dan lebih berhati-hati. Secara khusus, jangan terbiasa mengatakan y
jika diminta untuk menimpa (bisa dibilang, alias seharusnya alias cp='yes n | cp -i' mv='yes n | mv -i'
, tetapi menekan Ctrl+ Cmembuat output terlihat lebih baik): jika Anda bermaksud menimpa, membatalkan perintah, memindahkan atau menghapus output file, dan jalankan perintah lagi.
Penting juga untuk tidak membiasakan diri memicu keselamatan tersebut karena jika Anda melakukannya, suatu hari Anda akan berada di mesin yang tidak memiliki konfigurasi Anda, dan Anda akan kehilangan data karena perlindungan yang Anda hitung pada saat itu tidak di sana.
noclobber
hanya akan ditetapkan untuk shell interaktif, karena .bashrc
atau .zshrc
hanya dibaca oleh shell interaktif. Tentu saja Anda tidak boleh mengubah opsi shell dengan cara yang akan memengaruhi skrip, karena skrip tersebut dapat merusak skrip tersebut.
rm *
...