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

标签 linux shell cygwin

我有一个 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 builtinhelp commandhelp aliasman sh

关于linux - Cygwin: '\rm -fr' 和 'rm -fr' 命令之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870666/

相关文章:

node.js - 在 cygwin 中更新 nodejs

java - 错误 : parse error before "double" (cygwin)

linux - ubuntu 服务器中意外标记 ')' 附近出现语法错误

linux - CentOS - 将每个 WAV 文件转换为 MP3/OGG

linux - 使用分隔符拆分日志文件以保持数据完整性

linux - 在 bash 脚本中,如何在 while 循环条件中使用函数退出状态

vim - Cygwin 上的 Git 错误,以前从未见过,全新安装

linux - 动态删除重复的日志消息

linux - mdns:是否有 avahi-daemon 的网络服务接口(interface)?

macos - 在 Mac 和 Linux 上使用终端有什么区别?