macos命令行参数最后没有工作

时间:2017-12-06 21:18:51

标签: linux bash macos shell args

在Linux系统上,当您在rm * -rf等shell中键入命令时,*-rf的顺序无关紧要。我的shell以同样的方式解释它。现在,在我的Mac上输入rm -rf *时,一切正常,但如果我rm * -rf出现错误rm: -rf: No such file or directory

我在macOS和linux上尝试过使用fish和bash shell。同样的问题。

有没有人知道为什么macOS上的命令解释器认为命令末尾的-rf没有被解释为命令的参数?

2 个答案:

答案 0 :(得分:2)

这不是关于shell,而是关于命令。 解析命令行参数不是shell的功能和责任,而是实际命令的功能和责任。 在这两个系统中,shell忠实地以命令行的顺序传递命令行参数,然后由命令的实现来解析它们。[/ p>

在linux中,核心实用程序通常是GNU实现, 在osx上,核心实用程序通常是BSD实现。

命令的man页面应该告诉你它是哪个实现。

例如,Linux中man rm的最后一行是这样的:

GNU coreutils 8.21                March 2016                             RM(1)

在osx上:

BSD                            January 28, 1999                            BSD

答案 1 :(得分:1)

任何shell中的参数顺序在历史上都与unix相关。

顺便提一下,甚至还有一个选项 - 停止解析选项(能够删除以“ - ”开头的文件,例如。)

参见rm(1)和getopt(3)手册页

如果shell不遵守参数的顺序,那么它的结果将是这个序列的结果:

$ touch a b 
$ mv a b 

将保留哪个文件?