alk*_*ary 21 command-line options rm command
我知道这rm -f file1会在file1不提示我的情况下强行删除。
我也知道rm -i file1在删除之前会先提示我file1
现在,如果您执行rm -if file1,这也将在file1不提示我的情况下强行删除。
但是,如果您执行rm -fi file1,它会在删除之前提示我file1。
那么,在组合命令选项时,最后一个优先是真的吗?like rm -if, then-f将优先,但 rm -fithen the-i将优先。
该ls例如命令,如果你说不要紧ls -latR或ls -Rtal。
所以我想只有当你有矛盾的命令选项时才重要,比如rm -if,对吗?
cas*_*sey 23
使用时rm既-i和-f 选项,第一个将被忽略。这记录在POSIX标准中:
-f
Do not prompt for confirmation. Do not write diagnostic messages or modify
the exit status in the case of nonexistent operands. Any previous
occurrences of the -i option shall be ignored.
-i
Prompt for confirmation as described previously. Any previous occurrences
of the -f option shall be ignored.
Run Code Online (Sandbox Code Playgroud)
也在 GNUinfo页面中:
‘-f’
‘--force’
Ignore nonexistent files and missing operands, and never prompt the user.
Ignore any previous --interactive (-i) option.
‘-i’
Prompt whether to remove each file. If the response is not affirmative, the
file is skipped. Ignore any previous --force (-f) option.
Run Code Online (Sandbox Code Playgroud)
让我们看看引擎盖下发生了什么:
rm处理其选项getopt(3),特别是getopt_long。此函数将按**argv出现顺序处理命令行 ( ) 中的选项参数:
如果 getopt() 被重复调用,它会从每个选项元素中连续返回每个选项字符。
此函数通常在循环中调用,直到处理完所有选项。从这个函数的角度来看,选项是按顺序处理的。 然而,实际发生的情况取决于应用程序,因为应用程序逻辑可以选择检测冲突选项、覆盖它们或呈现错误。 对于rm和i和f选项,它们完美地相互覆盖。来自rm.c:
234 case 'f':
235 x.interactive = RMI_NEVER;
236 x.ignore_missing_files = true;
237 prompt_once = false;
238 break;
239
240 case 'i':
241 x.interactive = RMI_ALWAYS;
242 x.ignore_missing_files = false;
243 prompt_once = false;
244 break;
Run Code Online (Sandbox Code Playgroud)
这两个选项设置相同的变量,这些变量的状态将是命令行中最后一个选项。这样做的效果符合 POSIX 标准和rm文档。
是的,因为rm这是有效的。如果最后一个选项覆盖以前的选项,则取决于单个程序本身。来自“信息”
'-f' '--force' 忽略不存在的文件和丢失的操作数,从不提示用户。忽略任何以前的 '--interactive' ('-i') 选项。
'-i' 提示是否删除每个文件。如果响应不是肯定的,则跳过该文件。忽略任何以前的 '--force' ('-f') 选项。相当于“--interactive=always”。
作为一般提示:info通常比 更详细man,它本身通常比--help选项更详细。
标志没有“优先级”,每个程序都按照它希望的方式处理它们。大多数人会努力收集所有标志并检查冲突,对于标准工具(如引用的rm(1)),相关标准可能会强制要求某些东西(但话说回来,您的特定版本在解释标准的极端情况时可能很草率/没有得到专门测试为他们)。
对于编写程序的程序员来说,最容易以严格的从左到右的顺序考虑参数(标志和其他),并且可能会在遇到障碍时跳出。如果使用库来处理标志(例如getopt(3),有几个版本浮动),程序员可能会做最简单/自然的事情。程序员也是人,人是懒惰的(或者至少不喜欢通过组合爆炸来思考)。
| 归档时间: |
|
| 查看次数: |
4030 次 |
| 最近记录: |