Korumalı dosyayı kaldırırken birkaç kez “y” yayınlama gereksinimi nasıl önlenir


52

"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?


Bir fonksiyon tanımlayabilirsiniz. Bu thrad size yardımcı olabilir: stackoverflow.com/questions/756756/… .
alpert

Bunu neden yapmak istiyorsun? Her durumda ve .bashrc'de satır başı yazdırmak istemek çok açık bir görevdir (yeni hatların aksine).
lbb0

@ l0b0 sorusu daha spesifik olacak şekilde düzenlendi
Iancovici

Neden .bashrc'deki dosyaları kaldırmak istiyorsunuz? Orijinal görev hala net değil.
l0b0

3
@echadromani Başka problemlere uygulanabilir en uygun çözümü sağlamak için orijinal problemi anlamaya çalışmak SO / SE'de çok yaygındır.
lbb0

Yanıtlar:


75

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'

yesSonsuza kadar verdiğiniz herhangi bir dizgeyi, yeni satırlarla ayırarak tekrarlar. headzaman sonra durur $numberve tryeni 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 bashkutu borusuna sonucu etmek od, hexdumpya da xxdgerçek karakterler verildiğini görmek.


7

Ben zaman zaman yaşamanıza diğer konu yani rmtakma 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 .


5

rmkorumalı dosyalar üzerinde "etkileşimli" (kullanıcı girişi için bekleyen komut istemek) istemesi zor kodlanmıştır. rmsormaktan kaçınmanın iki yolu var :

rm -rf somedir

ve

rm -r --interactive=never somedir

(her ikisi de -rdirs yerine dosyaları silerken çalışmaz )

açıklama:

-fyapar rm"istemi, varolmayan dosya ve argümanları asla görmezden" için.

--interactive=neverne diyorsa yapar: asla etkileşimli olmayın. Başka bir deyişle: asla istemem.

-fve --interactive=neverbu 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 rmzaman 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


1

Sadece tüm emirlerine evet ver!

yes | rm -r /path/
yes | <command>

Her zaman aşağıdakileri kullanarak zorlayabilirsiniz -f:

rm -r -f /path

-2

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


Bu, tüm dizini kaldırdığı için reddedildi. Muhtemelen OP sadece söz konusu dosyayı kaldırmak istiyor, aynı dizindeki alt dosyadaki her dosyayı değil.
Jake,

Hey .... Haklı olabilirsin.
Gopal Prasad

Hey .... Haklı olabilirsin. Fakat bu durumda değil .. Bir kullanıcının çok sabrı ve zamanı varmış gibi, o zaman 'evet' e birkaç kez vermek için zamanı da var ... Tüm dosyaları tek bir komutla silmek istediğini varsaydım .. korumalı dosya bu tür dosyaları silmeden önce daima onay ister. Böyle bir örnek, sanalenv oluşturduğunuzda ve daha sonra python ile kaldırmak istediğinizde olabilir. Lütfen deneyin ve rm komutunu her seferinde onaylama ve soran bulacaksınız. bir cevap vermelisin .. Durumu bu şekilde çözdüm.
Gopal Prasad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.