"Rm: yazmaya karşı korumalı düzenli dosyayı kaldır [x]?" A yanıt olarak kullanılacak bir çözüm arıyorum.
Bir karakter çıkarmayı ve ardından birkaç defa basrc cinsinden satır başı getirmeyi düşünüyordum. Bunu nasıl yaparız?
"Rm: yazmaya karşı korumalı düzenli dosyayı kaldır [x]?" A yanıt olarak kullanılacak bir çözüm arıyorum.
Bir karakter çıkarmayı ve ardından birkaç defa basrc cinsinden satır başı getirmeyi düşünüyordum. Bunu nasıl yaparız?
Yanıtlar:
Güncellenmiş soruya göre düzenleyin:
Dosyaları kaldırma hakkında soru sorulmaması için, -f
("zorla") seçeneğini ekleyin :
rm -f /path/to/file
Bu farkında olmalı bir yan etkisi vardır: Verilen yolların herhangi biri yoksa, o olacak değil bu rapor, ve başarıyla döndürür:
$ rm -f /nonexistent/path
$ echo $?
0
Orijinal cevap:
İşte basit bir çözüm:
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
Sonsuza kadar verdiğiniz herhangi bir dizgeyi, yeni satırlarla ayırarak tekrarlar. head
zaman sonra durur $number
ve tr
yeni satırları satırbaşına çevirir. Satırbaşının iadeleri nedeniyle herhangi bir çıktı göremeyebilirsiniz, ancak onu bu komuta (in bash
) iletmek şunu göstermelidir:
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
Olmayan kullanıcılar bash
kutu borusuna sonucu etmek od
, hexdump
ya da xxd
gerçek karakterler verildiğini görmek.
Ben zaman zaman yaşamanıza diğer konu yani rm
takma ad olduğu için rm -i
, / etc / bashrc böyle bir şey:
alias rm='rm -i'
Bu durumda unalias rm
, yıllar önce öğrendiğim bu numarayı kullanabilir ya da kullanabilirsiniz, takma adın tam olarak yok sayılması için takma adı verilen bir komutun önüne ters eğik çizgi koyun. Örneğin:
\rm somefile
Nixcraft'taki bir makale aracılığıyla takma adlar hakkında daha fazla bilgi edinebilirsiniz .
rm
korumalı dosyalar üzerinde "etkileşimli" (kullanıcı girişi için bekleyen komut istemek) istemesi zor kodlanmıştır. rm
sormaktan kaçınmanın iki yolu var :
rm -rf somedir
ve
rm -r --interactive=never somedir
(her ikisi de -r
dirs yerine dosyaları silerken çalışmaz )
açıklama:
-f
yapar rm
"istemi, varolmayan dosya ve argümanları asla görmezden" için.
--interactive=never
ne diyorsa yapar: asla etkileşimli olmayın. Başka bir deyişle: asla istemem.
-f
ve --interactive=never
bu kısım arasındaki fark : "var olmayan dosyaları ve argümanları yoksay".
karşılaştırmak:
$ rm -rf nonexistingname
$ echo $?
0
ve
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
Aradaki fark, hiçbir rm
zaman etkileşimli olmak istemediğiniz ancak yine de hataları işlemek istediğiniz komut dosyaları yazarken ilginçtir .
özeti: komut satırında kullanın rm -rf
. komut dosyalarında kullanın rm -r --interactive=never
.
Cevap için belirtilen soruyu yanıtlayın ("Korumalı dosyayı kaldırırken birkaç kez“ y ”basması gerektiğinden nasıl kaçınılır”) bkz. https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860
Ben de aynı sorunu yaşadım. Yukarıdaki cevap sadece bir dosya içindir, ancak çok fazla eveti yoksaymak istiyorsanız.
Kullanabilirsiniz
sudo rm -r /path/to/directory
tüm yazma korumalı düzenli dosyayı kaldırmak için