2016-05-12 15 views
2

Ich versuche, einen einfachen Befehl zum Entfernen aller whatever.whatever~ Dateien, das sind alle versteckten Junk-Dateien, aber ich das Terminal fragt mich nach Ja oder Nein und ich weiß nicht, wie hart Code ja in das Skript.Geben Sie Benutzertext in. Bashrc

Dies ist, was ich bisher los:

alias cleandir=' 
for i in ./*~ 
do 
rm "$i" 
yes 

done' 

Dies führt im Terminal mich zu fragen, ja zu betreten oder nicht für jedes Objekt gelöscht werden, und dann eine unendliche Menge an ‚y‘ schreiben .

zum Beispiel:

joel test$ cleanup 
rm: remove regular file ‘./~main~.cpp~’? 

Ich schreibe ja oder nein, dann:

y 
y 
y 
y 
etc... 

Wie kann ich meine „Ja“ mache tatsächlich im Terminal aufgefordert werden, als ob es der Benutzer war es schreiben?

Erstes Schreiben. Vielen Dank im Voraus!

+2

Verwenden Sie 'rm -f" $ i "' oder Rohr ja zu rm 'ja | rm "$ i" ' – andlrc

+0

@andlrc: Bitte schreibe _answers_ in den _answer section_. Wie der Name schon sagt, dafür ist es da. –

Antwort

4

Warum verwenden Sie nicht einfach find dafür?

alias cleandir="find /some/path -type f -name '*~' -delete" 

Das, was ich alle .pyc Dateien von Python entfernen verwenden und funktioniert sehr gut (natürlich mit -name '*.pyc' statt).

1

Um Ihre Frage zu beantworten, über Eingang in dem ‚rm‘ Prozess Fütterung (richtigen, jeden Prozess), können Sie entweder Rohr Daten von einem Prozess oder umleiten aus einer Datei z

$ yes | rm 

pipe die stdout von 'ja' in die stdin von 'rm'. Dies ist nützlich für die dynamische Ausgabe eines Prozesses.

Oder Sie können von einer Datei z.

$ rm < 'myYesFile.txt' 

die den Inhalt myYesFile.txt nimmt und weiterleitet, die auf die von stdin ‚rm‘. Das ist nützlich für einen statischen Satz von Antwort/Eingabedaten. Beachten Sie, dass Sie keine separate Datei benötigen, und Sie könnten eine heredoc z.

$ rm <<EOF 
y 
y 
y 
EOF 

und deklarieren Sie Ihre Eingaben explizit in der Shell.