gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:04:51 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com