我在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'呢。 我想知道这两个命令之间的基本区别。
答案 0 :(得分:9)
rm
可以是(理论上)以下之一:
如果你把\
放在它之前(或引用它的任何部分,例如"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 builtin
,help command
,help alias
和man 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
...