Cygwin: différence entre la commande ‘\ rm -fr’ et ‘rm -fr’?

J’ai un script shell exécuté sur un environnement Windows sur un environnement cygwin. Ce script a une fonction de purge qui supprime certains dossiers sur les bases du système sous certaines conditions.

Je prépare la liste de tous les dossiers que je veux supprimer puis utilise la commande suivante:

rm -rfv $purge (where purge is the list of directories I want to delete) 

Maintenant, quand j’ai testé ce script, les répertoires ne sont pas supprimés du tout. Tout d’abord, j’ai pensé qu’il y avait un problème avec la liste de purge, mais lors du débogage, j’ai appris que la liste de purge était correcte.

Après beaucoup de débogage et d’essais, je viens de faire un petit changement de commande:

 \rm -rfv $purge 

C’est juste une sorte de hit et de test et le script commence à bien fonctionner. Pour autant que je sache, \ rm et rm -f signifient une suppression forcée.

Maintenant, comment puis-je justifier cela pourquoi rm -f fonctionne maintenant plus tôt, mais rm -f l’a fait. Je veux connaître la différence fondamentale entre ces deux commandes.

Le rm peut être (en théorie) l’un des:

  • commande intégrée shell (toutefois, je ne connais aucun shell avec une telle méthode intégrée)
  • commande externe (le plus probable / bin / rm)
  • une fonction shell
  • un alias

Si vous mettez \ avant (ou si vous en citez une partie, par exemple "rm" ou même 'r'm ), le shell ignorera tous les alias (mais pas les fonctions).

Comme jlliagre l’a mentionné, vous pouvez demander à shell ce que rm est et ce qui est \rm utilisant le type builtin.

Expérience:

 $ type rm rm is /bin/rm $ rm() { echo "FUNC"; command rm "$@"; } $ type rm rm is a function $ alias rm='echo ALIAS; rm -i' $ type rm rm is aliased to `echo ALIAS; rm -i' 

Maintenant, nous avons alias rm , fonction rm et commande externe d’origine rm : Voyons comment s’appeler:

 $ rm # this will call alias, calling function calling real rm $ rm ALIAS FUNC rm: missing operand $ \rm # this will ignore alias, and call function calling real rm FUNC rm: missing operand $ command rm # this will ignore any builtin, alias or function and call rm according to PATH rm: missing operand 

Pour le comprendre en profondeur, voir help builtin , help command , help alias et man sh .

Cela signifie que votre commande rm est un alias ou une fonction . La barre oblique inverse indique au shell d’utiliser la commande real rm.

Edit: Vous pouvez dire à quoi rm réfère avec la commande type , par exemple:

 $ type rm rm is /bin/rm 

.

 $ type rm rm is aliased to `rm -i' 

.

 $ type rm rm is a function ...