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