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

52

Je recherche 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 de voiture plusieurs fois, en bashrc. Comment fait-on cela?

Iancovici
la source
Vous pouvez définir une fonction. Ce thrad peut vous aider: stackoverflow.com/questions/756756/… .
alpert
Pourquoi veux-tu faire cela? Vouloir imprimer les retours à la ligne (par opposition aux nouvelles lignes) n’est en tout cas pas une tâche évidente, et en .bashrc?
L0B0
@ l0b0 question modifiée pour être plus précis
Iancovici
Pourquoi voudriez-vous supprimer des fichiers dans .bashrc? La tâche initiale n'est toujours pas claire.
L0B0
3
@echadromani Il est très courant sur SO / SE d'essayer de comprendre le problème initial afin de fournir une solution optimale pouvant s'appliquer à d'autres situations.
L0B0

Réponses:

75

Modifier en fonction de la question mise à jour:

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

rm -f /path/to/file

Ceci 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 retournera avec succès:

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

Réponse originale:

Voici une solution simple:

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

yesrépète n'importe quelle chaîne que vous lui attribuez à l'infini, séparées par des nouvelles lignes. headl'arrête après le $numbertemps et trconvertit les nouvelles lignes en retours à la ligne. Vous pourriez ne voir aucune sortie à cause des retours chariots, mais le passer à cette commande (in bash) devrait l'illustrer:

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

Les utilisateurs ne bashpouvant pas diriger le résultat vers od, hexdumpou xxdvoir les caractères réels retournés.

l0b0
la source
7

L’autre problème que j’ai rencontré de temps en temps est rmson alias rm -i, comme dans le fichier / etc / bashrc:

alias rm='rm -i'

Dans ce cas, vous pouvez unalias rmutiliser cette astuce que j'ai découverte il y a des années. Vous pouvez placer une barre oblique inversée devant une commande avec alias, pour ignorer l'alias une seule fois, par exemple:

\rm somefile

Vous pouvez en apprendre plus sur les alias en lisant un article sur Nixcraft .

slm
la source
5

rmest codé en dur pour demander "de manière interactive" (invite en attente d'une entrée utilisateur) sur les fichiers protégés en écriture. il existe deux méthodes pour empêcher rmde demander:

rm -rf somedir

et

rm -r --interactive=never somedir

(les deux fonctionnent aussi sans -rsuppression de fichiers au lieu de répertoires)

explication:

-ffait rmpour "ignorer les arguments et les fichiers non existants, ne jamais inviter".

--interactive=neverfait ce qu'il dit: ne soyez jamais interactif. en d'autres termes: ne jamais demander.

la différence entre -fet --interactive=neverest cette partie: "ignorer les fichiers et les 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 surtout intéressante lorsque vous écrivez des scripts dans lesquels vous ne voulez jamais rmêtre interactif, mais voulez quand même gérer les erreurs.

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


pour obtenir une réponse à la question indiquée ("Comment éviter la nécessité d'émettre plusieurs fois« y »lors de la suppression d'un fichier protégé»), voir https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860

lesmana
la source
1

il suffit de donner un oui à toutes vos commandes!

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

Quoi qu'il en soit, vous pouvez toujours forcer en utilisant -f:

rm -r -f /path
Nakamoto
la source
-2

Moi aussi j'ai eu le même problème. La réponse ci-dessus ne concerne qu'un fichier, mais si vous souhaitez ignorer beaucoup de oui.

Vous pouvez utiliser

sudo rm -r /path/to/directory

supprimer tout fichier normal protégé en écriture

Gopal Prasad
la source
Ceci est en train d'être voté parce qu'il supprime tout le répertoire. Vraisemblablement, OP ne souhaite que supprimer le fichier en question, pas tous les fichiers du même sous-arbre de répertoire.
Jake
Hey .... Peut-être que vous avez raison.
Gopal Prasad
Hey .... Peut-être que vous avez raison. Mais pas dans ce cas .. Comme si un utilisateur avait beaucoup de patience et de temps, il a aussi le temps de donner "oui" plusieurs fois ... J'ai supposé qu'il voulait supprimer tous les fichiers avec une seule commande .. Comme écrire le fichier protégé demande toujours confirmation avant de supprimer ce type de fichier. Un exemple de ce type est le cas où vous créez virtualenv et que vous souhaitez ensuite supprimer en python .. Merci de l'essayer. Vous trouverez alors la commande rm demandant confirmation vous devez fournir une réponse .. J'ai résolu la situation de cette façon.
Gopal Prasad