Comment puis-je supprimer un fichier sans demander à l'utilisateur s'il accepte de supprimer le fichier? J'écris un script shell et utilise la fonction rm, mais il me demande "supprimer le fichier normal?" et je n'ai vraiment pas besoin de ça. Je vous remercie.
89
rm -f
,yes | rm
Et ainsi de suite, mais cela appartient à SU.rm
ne montre pas un "supprimer un fichier normal?" invite par défaut. Vous devez l'avoir aliasérm -i
ou défini comme une fonction. Je suis surpris que l'alias soit visible dans votre script. Exécutez-vous le script (./foo.sh
) ou recherchez-vous (. foo.sh
ousource foo.sh
)?Réponses:
Vous pourriez avoir
rm
aliasé pourrm -i
alors essayez ceci:Pour voir vos alias, vous pouvez exécuter
alias
.la source
command rm ...
ou\rm ...
ignorer l'alias / la fonctionrm
aliasrm -i
est une mauvaise idée. Larm
commande, par défaut, en silence supprime le fichier nommé. En y faisant référencerm -i
, vous pouvez prendre l’habitude de ne pas vérifier soigneusement avant d’appuyer sur Entrée, en fonction de l’invite interactive à laquelle vous souhaitez vous enregistrer. Ensuite, vous tapezrm some-important-file
dans un environnement sans alias.unset
commande bash pourrait être intéressanteL'indicateur de force supprime toutes les invites;
rm -f {file}
la source
Que la force soit avec toi -
rm -f
la source
Dans un script shell, vous voudriez utiliser,
rm -f <filename>
mais vous avez également la possibilité de supprimer l'-i
option implicite pour votre environnement en entrantunalias rm
dans votre shell (ou votre profil).la source
unalias rm
ne fonctionne pas dans CentOS? Amazon Linux?le
yes
programme répond à plusieurs reprises par oui à toutes les invites. afin que vous puissiez le diriger vers lerm
programme interactif pour obtenir également l'effet souhaité.à l'inverse, si vous ne voulez pas faire quelque chose d'interactif, vous pouvez faire
et qui répètera 'n' sur le flux d'entrée (en répondant non à des questions)
la source
yes n
option ne fonctionne pas pour moi. Bien que j'utiliseyes n | rm file.txt
, il supprime le fichier même s'il est protégé correctement.Si vous disposez des autorisations requises pour supprimer le fichier et que vous ne souhaitez pas recevoir d'invite, procédez comme suit (-f = force):
Si vous n'avez pas les autorisations pour le fichier, vous devrez utiliser:
la source
La barre oblique inverse
\
contourne les alias.la source
Outre le
-f
paramètre, vous pouvez également utiliser lafind
commande, par exemplela source
Actuellement, je travaille sur un système où le shell bash a reçu la définition de la commande rm en tant que fonction dans l'un des fichiers de configuration globaux:
Par conséquent, aucune des réponses ci-dessus concernant les alias n'a fonctionné. Pour contrer le comportement ennuyeux, je désactive la fonction rm dans mon fichier .bashrc
J'ai eu un problème similaire à celui du premier match. Cependant, je n'ai trouvé aucune réponse mentionnant la possibilité
rm
cachée par une fonction shell. J'ai donc ajouté la réponse ici dans l'espoir que cela aiderait quelqu'un confronté au même type de problème.Taper
/bin/rm
ourm -f
tout le temps est peu pratique et peut avoir de mauvaises conséquences (dans le cas derm -f
).la source
/bin/rm
marche pas? Si j'ai une fonction dans bash et un fichier exécutable avec le même nom dans le répertoire en cours, ajouter simplement./
devant le nom appellera le fichier - pas la fonction. PS - J'ai ajouté un commentaire à la réponse sélectionnée à propos d'une fonction &unset
/bin/rm
marche. Faire celaunset
élimine le besoin de taper le chemin complet.Si votre
rm
est associé àrm -i
, utilisezunalias rm
;N'utilisez pas
rm -f
directement sauf si vous voulez vraiment supprimer beaucoup de fichiers protégés en écriture. Il doit y avoir une très bonne raison d'utiliser-f
.Toutefois, si vous avez beaucoup de fichiers protégés en écriture, vous préférerez peut-
rsync -r --delete empty/ removed_dir/
être une vitesse plus rapide.la source
Ma façon préférée de faire ceci est simplement d'utiliser la
command
commande dans bash, de la même manière que vous utilisezsudo
. Cela exécutera votre commande sans alias, tout comme l'exécuter par/bin/rm
(rm
est probablement alias commerm -i
).Exemple:
la source
la source