it-swarm.com.de

So vermeiden Sie, dass beim Entfernen geschützter Dateien mehrmals "y" ausgegeben werden muss

Ich suche nach einer Lösung, die als Antwort auf "rm: Schreibgeschützte reguläre Datei [x] entfernen?" Verwendet werden kann.

Ich dachte daran, ein Zeichen herauszugeben, gefolgt von einem mehrmaligen Wagenrücklauf in bashrc. Wie machen wir das?

60
Iancovici

Bearbeiten basierend auf aktualisierter Frage :

Fügen Sie die Option -f ("Force") hinzu, um nicht nach dem Entfernen von Dateien gefragt zu werden:

rm -f /path/to/file

Dies hat einen Nebeneffekt, den Sie beachten sollten: Wenn einer der angegebenen Pfade nicht vorhanden ist, wird dies nicht gemeldet und erfolgreich zurückgegeben ::

$ rm -f /nonexistent/path
$ echo $?
0

Ursprüngliche Antwort:

Hier ist eine einfache Lösung:

yes "$string" | head -n $number | tr $'\n' $'\r'

yes wiederholt jede Zeichenfolge, die Sie ihm geben, unendlich, getrennt durch Zeilenumbrüche. head stoppt es nach $number Zeiten und tr übersetzt die Zeilenumbrüche in Wagenrückläufe. Möglicherweise wird aufgrund der Wagenrückläufe keine Ausgabe angezeigt, aber die Übergabe an diesen Befehl (in bash) sollte dies veranschaulichen:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Benutzer ohne bash können das Ergebnis an od, hexdump oder xxd weiterleiten, um die tatsächlich zurückgegebenen Zeichen anzuzeigen.

85
l0b0

Das andere Problem, auf das ich von Zeit zu Zeit gestoßen bin, ist, dass rm auf rm -i Aliased ist, so etwas in/etc/bashrc:

alias rm='rm -i'

In diesem Fall können Sie entweder unalias rm Oder diesen Trick verwenden, den ich vor Jahren herausgefunden habe, einen Backslash vor einen Befehl setzen, der mit einem Alias ​​versehen wurde, um den Alias ​​nur einmal zu ignorieren, zum Beispiel:

\rm somefile

Weitere Informationen zu Aliasen finden Sie in einem Artikel unter Nixcraft .

7
slm

rm ist fest codiert, um "interaktiv" (Eingabeaufforderung warten auf Benutzereingaben) für schreibgeschützte Dateien zu fragen. Es gibt zwei Methoden, um zu verhindern, dass rm fragt:

rm -rf somedir

und

rm -r --interactive=never somedir

(beide funktionieren auch ohne -r beim Löschen von Dateien anstelle von Verzeichnissen)

erläuterung:

-f veranlasst rm, "nicht vorhandene Dateien und Argumente zu ignorieren, niemals aufzufordern".

--interactive=never macht was es sagt: Sei niemals interaktiv. mit anderen Worten: niemals auffordern.

der Unterschied zwischen -f und --interactive=never ist dieser Teil: "Nicht vorhandene Dateien und Argumente ignorieren".

vergleichen Sie:

$ rm -rf nonexistingname
$ echo $?
0

und

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

der Unterschied ist vor allem beim Schreiben von Skripten interessant, bei denen rm niemals interaktiv sein soll, aber dennoch Fehler behandelt werden sollen.

zusammenfassung: Verwenden Sie in der Befehlszeile rm -rf. Verwenden Sie in Skripten rm -r --interactive=never.


eine Antwort auf die angegebene Frage ("So vermeiden Sie, dass beim Entfernen geschützter Dateien mehrmals" y "ausgegeben werden muss) finden Sie unter https://askubuntu.com/questions/338857/automatically-enter-input-in -command-line/338860 # 33886

5
lesmana

gib einfach Ja zu all deinen Befehlen!

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

Auf jeden Fall können Sie mit -f Immer erzwingen:

rm -r -f /path
1
Nakamoto