macOS命令参数混排问题
引子
近日观笔记本市场甚是火热,笔者所持机器亦老化严重,续航已十不存一,是为更换新笔记本时。观互联网上众多选择,唯有苹果公司之MacBook系列续航得一致好评,于是便购入之。
差异
macOS
是基于Unix
的操作系统,所以自然有shell之类的(类)Unix系统工具,ls
、cp
、rm
、ln
也少不了。笔者按Linux中的使用习惯来使用它们,但也发现了些许不同之处:
bash
root@Linux # rm trash -rf
root@Linux # rm -rf trash
# 两条命令均已成功执行
bash
root@macOS # rm trash -rf
rm: trash: is a directory
rm: -rf: no such file or directory
root@macOS # rm -rf trash
# 只有第二条命令成功执行
可见,macOS将后置的-rf选项作为了参数进行处理。
参数混排
查阅文档后发现,macOS不允许参数混排(argument permutation
),实际上是BSD提供的getopt
函数不支持混排。而GNU的getopt
函数进行了扩展,在运行时会将命令行传入的选项移动到前面,参数则放置于后面。因此,GNU coreutils
允许参数混排,而BSD
的工具集则不支持。
提示
GNU coreutils 是Unix常用命令(如ls
等)的 GNU 版。
如果想要在macOS上使用GNU coreutils,使用brew安装它,然后将coreutils所在的目录加入PATH即可。