Sebebi noclobber
varsayılan olarak belirlenmemiştir gelenek. Kullanıcı arayüzü tasarımı ile ilgili olarak, “bu yeni dosyayı yarat” kolay eylemi yapmak ve “ya yeni bir dosya oluşturmak ya da mevcut bir dosyanın üzerine yazmak” için daha tehlikeli bir eylem yapmak daha iyi bir fikirdir. Bu nedenle noclobber
( >
yeni bir dosya oluşturmak, >|
mevcut bir dosyanın üzerine yazmak için) iyi bir fikirdir ve kabuğun birkaç on yıl sonra tasarlanması muhtemelen varsayılan olurdu.
Etkileşimli kabuk başlangıç dosyanızda ( .bashrc
veya .zshrc
) aşağıdakileri kullanmanızı kesinlikle öneririz :
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
Her durumda (yeniden yönlendirme, kopyalama, taşıma), mevcut verilerin silinmesi işlemin ana hedefi olmasa da, işlemin mevcut bazı verileri silmenin yan etkisi olabileceğinde, amaç fazladan bir engel eklemektir. rm -i
Bu listeye girmiyorum çünkü veri silmek birincil hedef rm
.
Notu Bunu yap noclobber
ve -i
olan güvenlik ağları . Eğer tetiklerse, yanlış bir şey yaptınız . Bu yüzden, üzerine ne yazdığınızı kontrol etmemek için bir bahane olarak kullanmayın! Mesele şu ki, çıktı dosyasının mevcut olmadığını kontrol etmiş olmalısınız. Size söylenirse file exists: foo
veya overwrite 'foo'?
, bu bir hata yaptığınız ve kendinizi kötü hissetmeniz ve daha dikkatli olmanız gerektiği anlamına gelir. Özellikle, y
üzerine yazmanız istenirse ( alışkanlık olarak takma adlar olmalı alias cp='yes n | cp -i' mv='yes n | mv -i'
, ancak Ctrl+ tuşuna basmak Cçıktıyı daha iyi gösterir) söyleme alışkanlığına girmeyin : üzerine yazmak, komutu iptal etmek, çıktıyı taşımak veya kaldırmak dosyasını seçin ve komutu tekrar çalıştırın.
Ayrıca, bu güvenlikleri tetikleme alışkanlığına girmemek de önemlidir, çünkü eğer yaparsanız, bir gün yapılandırmanıza sahip olmayan bir makinede olacaksınız ve veri kaybettiğiniz için güvende değilsiniz. orada.
noclobber
çünkü sadece, etkileşimli kabuklarda ayarlanacak .bashrc
veya .zshrc
sadece etkileşimli kabuklarda okunur. Elbette kabuk seçeneklerini komut dosyalarını etkileyecek şekilde değiştirmemelisiniz, çünkü bu komut dosyalarını bozabilir.
rm *