Cygwin:'\ rm -fr'和'rm -fr'命令之间的区别?

时间:2012-06-03 13:17:11

标签: linux shell cygwin

我在cygwin环境下的Windows环境中运行了一个shell脚本。此脚本具有一个清除功能,可根据特定条件删除系统上的某些文件夹。

我准备了要删除的所有文件夹的列表,然后使用以下命令:

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

现在,当我测试此脚本时,目录根本没有被删除。首先我认为purge列表存在一些问题,但是在调试时我发现清除列表很好。

经过大量的调试和试验后,我对命令做了一些小改动:

\rm -rfv $purge 

它只是一种打击和试用,脚本开始正常工作。 据我所知,\ rm和rm -f都意味着强行删除。

现在我怎么能证明为什么'rm -f'现在工作得更早,但是'\ rm -f'呢。 我想知道这两个命令之间的基本区别。

2 个答案:

答案 0 :(得分:9)

rm可以是(理论上)以下之一:

  • shell builtin命令(但是我不知道任何有这种内置的shell)
  • 外部命令(很可能是/ bin / rm)
  • 一个shell函数
  • 别名

如果你把\放在它之前(或引用它的任何部分,例如"rm"或甚至'r'm),shell将忽略所有别名(但不是函数)。

正如jlliagre所提到的,你可以使用内置rm来询问shell \rm是什么以及type是什么。

<强>实验:

$ 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'

现在,我们有别名rm,函数rm和原始外部rm命令: 让我们看看如何互相打电话:

$ 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

要深入理解,请参阅help builtinhelp commandhelp aliasman sh

答案 1 :(得分:5)

这意味着您的rm命令是别名或函数。反斜杠它告诉shell使用真正的rm命令。

编辑:您可以使用rm命令告诉type引用的内容,例如:

$ type rm
rm is /bin/rm

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

$ type rm
rm is a function
...