我有一个 shell 脚本在 cygwin 环境中的 windows 环境中运行。该脚本有一个清除功能,可以根据特定条件删除系统中的特定文件夹。
我准备好要删除的所有文件夹的列表,然后使用以下命令:
rm -rfv $purge (where purge is the list of directories I want to delete)
现在当我测试这个脚本时,目录根本没有被删除。一开始我以为清除列表有问题,但在调试时我才知道清除列表没问题。
经过大量调试和试验后,我对命令做了一些小改动:
\rm -rfv $purge
它只是一种命中和试用,脚本开始正常工作。 据我所知,\rm 和 rm -f 都表示强制删除。
现在我怎么能证明为什么 'rm -f' 现在可以更早工作但 '\rm -f' 可以。 我想知道这两个命令之间的基本区别。
最佳答案
rm
可以(理论上)是以下之一:
- shell 内置命令(但是我不知道任何带有这种内置命令的 shell)
- 外部命令(很可能是/bin/rm)
- 一个shell函数
- 别名
如果你把 \
放在它前面(或引用它的任何部分,例如 "rm"
甚至 'r'm
) shell 将忽略所有别名(但不是函数)。
正如 jlliagre 提到的,您可以使用内置的 type
询问 shell rm
是什么以及 \rm
是什么。
实验:
$ 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
。
关于linux - Cygwin: '\rm -fr' 和 'rm -fr' 命令之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870666/