web-dev-qa-db-fra.com

Comment éviter d'avoir à émettre plusieurs fois "y" lors de la suppression d'un fichier protégé

Je cherche une solution à utiliser en réponse à "rm: supprimer le fichier normal protégé en écriture [x]?"

Je pensais émettre un caractère suivi d'un retour chariot pendant plusieurs fois, en bashrc. Comment fait-on cela?

60
Iancovici

Modifier en fonction de la question mise à jour:

Pour éviter d'être invité à supprimer des fichiers, ajoutez l'option -f ("Forcer"):

rm -f /path/to/file

Cela a un effet secondaire dont vous devez être conscient: Si l'un des chemins donnés n'existe pas, il ne le signalera pas , et il reviendra avec succès :

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

Réponse originale:

Voici une solution simple:

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

yes répète à l'infini toute chaîne que vous lui donnez, séparée par des retours à la ligne. head l'arrête après $number fois, et tr traduit les retours à la ligne en retours chariot. Il se peut que vous ne voyiez aucune sortie à cause des retours chariot, mais en la passant à cette commande (dans bash) devrait l'illustrer:

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

Les utilisateurs sans bash peuvent diriger le résultat vers od, hexdump ou xxd pour voir les caractères réels retournés.

85
l0b0

L'autre problème que j'ai rencontré de temps en temps est que rm est aliasé à rm -i, quelque chose comme ça dans/etc/bashrc:

alias rm='rm -i'

Dans ce cas, vous pouvez soit unalias rm ou vous pouvez utiliser cette astuce que j'ai découverte il y a des années, mettre une barre oblique inverse devant une commande qui a été aliasée, pour ignorer l'alias juste une fois, par exemple:

\rm somefile

Vous pouvez en savoir plus sur les alias à travers un article sur Nixcraft .

7
slm

rm est codé en dur pour demander "interactivement" (invite en attente de saisie utilisateur) sur les fichiers protégés en écriture. il existe deux méthodes pour empêcher rm de demander:

rm -rf somedir

et

rm -r --interactive=never somedir

(les deux fonctionnent également sans -r lors de la suppression de fichiers au lieu de dirs)

explication:

-f oblige rm à "ignorer les fichiers et arguments inexistants, jamais à l'invite".

--interactive=never fait ce qu'il dit: ne soyez jamais interactif. en d'autres termes: jamais rapide.

la différence entre -f et --interactive=never est cette partie: "ignorer les fichiers et arguments inexistants".

comparer:

$ rm -rf nonexistingname
$ echo $?
0

et

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

la différence est principalement intéressante lors de l'écriture de scripts où vous ne voulez jamais que rm soit interactif mais que vous vouliez toujours gérer les erreurs.

résumé: en ligne de commande, utilisez rm -rf. dans les scripts, utilisez rm -r --interactive=never.


pour une réponse à la question posée ("Comment éviter d'avoir à émettre plusieurs fois" y "lors de la suppression d'un fichier protégé") voir https://askubuntu.com/questions/338857/automatically-enter-input-in -commande-ligne/338860 # 33886

5
lesmana

donnez oui à toutes vos commandes!

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

Quoi qu'il en soit, vous pouvez toujours forcer l'utilisation de -f:

rm -r -f /path
1
Nakamoto