S.M*_*lam 26 linux man rm arguments
我们可以看到rm
命令的概要是:
rm [OPTION]... [FILE]...
Run Code Online (Sandbox Code Playgroud)
这不是意味着我们只能使用rm
命令而没有任何选项或参数吗?
当我自己运行命令rm
时,终端会显示以下错误:
Run Code Online (Sandbox Code Playgroud)rm: missing operand Try 'rm --help' for more information.
谁能告诉我为什么会这样?
Kus*_*nda 46
该rm
实用程序的标准概要在 POSIX 标准1&2 中指定为
rm [-iRr] file...
rm -f [-iRr] [file...]
Run Code Online (Sandbox Code Playgroud)
在第一种形式中,它确实需要至少一个文件操作数,但在第二种形式中则不需要。
这样做rm -f
有没有文件操作数是不是一个错误:
$ rm -f
$ echo "$?"
0
Run Code Online (Sandbox Code Playgroud)
...但它只是没有做太多。
该标准说,对于该-f
选项,rm
实用程序应该......
不提示确认。在没有文件操作数或操作数不存在的情况下,不要写入诊断消息或修改退出状态。任何先前出现的
-i
选项都将被忽略。
这确认必须可以在rm -f
没有任何路径名操作数的情况下运行,并且这不会导致rm
退出并出现诊断消息或非零退出状态。
这个事实在试图删除许多文件的脚本中非常有用
rm -f -- "$@"
Run Code Online (Sandbox Code Playgroud)
where"$@"
是路径名列表,可能为空,也可能不为空,或者可能包含不存在的路径名。
(rm -f
如果存在阻止删除命名文件的权限问题,仍将生成诊断消息并以非零退出状态退出。)
运行既没有选项也没有路径名操作数的实用程序是一个错误:
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
Run Code Online (Sandbox Code Playgroud)
这同样适用于 GNU rm
(上面显示的是 OpenBSD rm
)和同一实用程序的其他实现,但确切的诊断消息和非零退出状态可能不同(在 Solaris 上该值为 2,在 macOS 上为 64,例如)。
总之,GNUrm
手册可能有点不精确,因为确实有一些选项(-f
,这是一个可选选项),路径名操作数是可选的。
1自2016版以来,解决此bug后,请参阅上一版以供参考。
2 POSIX 是定义 Unix 系统及其行为方式的标准。该标准由The Open Group 发布。另请参阅问题“ POSIX 到底是什么? ”。
从技术上讲,概要是正确的,但令人困惑。有些情况下不需要文件名:
rm --help
rm --version
Run Code Online (Sandbox Code Playgroud)
(使用 GNU 时rm
)。所有其他情况都需要文件名。
其他版本rm
的文件显示为非可选,例如在OpenBSD 手册页中。
更准确的 GNU 概要rm
将显示三个变体:
rm
[选项...]文件...
rm --help
rm --version