macos命令行参数最后不起作用
macos command line params not working at the end
在 linux 系统上,当您在 shell 中键入命令时,例如 rm * -rf
,*
和 -rf
的顺序不会事情。我的 shell 以同样的方式解释它。现在,在我的 Mac 上,当我输入 rm -rf *
时,一切正常,但如果我输入 rm * -rf
,则会出现错误 rm: -rf: No such file or directory
我在 macOS 和 linux 上尝试过,同时使用 fish 和 bash shells。同样的问题。
有谁知道为什么 macOS 上的命令解释器认为命令末尾的 -rf
没有被解释为命令的参数?
这与 shell 无关,而与命令有关。
命令行参数的解析不是 shell 的功能和责任,而是实际命令的功能和责任。
在这两个系统中,shell 忠实地按照指定的顺序传递命令行参数,然后由命令的实现来按照他们认为合适的方式解析它们。
在linux中,核心实用程序通常是 GNU 实现的,
而在 osx 上,核心实用程序通常是 BSD 实现。
命令的 man
页面应该会告诉您它是哪个实现。
例如Linux中man rm
的最后一行是这样的:
GNU coreutils 8.21 March 2016 RM(1)
在 osx:
BSD January 28, 1999 BSD
任何 shell 中的参数顺序历来与 unix 相关。
rm 顺便说一句,甚至有一个选项 -- 停止解析选项(能够删除以“-”开头的文件,例如)
参见 rm(1) 和 getopt(3) 手册页
如果 shell 不遵守参数的顺序,它给出的结果将是这个序列:
$ touch a b
$ mv a b
将保留什么文件?
在 linux 系统上,当您在 shell 中键入命令时,例如 rm * -rf
,*
和 -rf
的顺序不会事情。我的 shell 以同样的方式解释它。现在,在我的 Mac 上,当我输入 rm -rf *
时,一切正常,但如果我输入 rm * -rf
,则会出现错误 rm: -rf: No such file or directory
我在 macOS 和 linux 上尝试过,同时使用 fish 和 bash shells。同样的问题。
有谁知道为什么 macOS 上的命令解释器认为命令末尾的 -rf
没有被解释为命令的参数?
这与 shell 无关,而与命令有关。 命令行参数的解析不是 shell 的功能和责任,而是实际命令的功能和责任。 在这两个系统中,shell 忠实地按照指定的顺序传递命令行参数,然后由命令的实现来按照他们认为合适的方式解析它们。
在linux中,核心实用程序通常是 GNU 实现的, 而在 osx 上,核心实用程序通常是 BSD 实现。
命令的 man
页面应该会告诉您它是哪个实现。
例如Linux中man rm
的最后一行是这样的:
GNU coreutils 8.21 March 2016 RM(1)
在 osx:
BSD January 28, 1999 BSD
任何 shell 中的参数顺序历来与 unix 相关。
rm 顺便说一句,甚至有一个选项 -- 停止解析选项(能够删除以“-”开头的文件,例如)
参见 rm(1) 和 getopt(3) 手册页
如果 shell 不遵守参数的顺序,它给出的结果将是这个序列:
$ touch a b
$ mv a b
将保留什么文件?