在Linux上,你可以这样做 rm -rf aFolder / 或 rm aFolder -rf
但在Mac上你只能做 rm -rf aFolder /
有人知道问题是什么,或者如何解决?
Linux中的大多数命令都可以双向执行 rm -rf aFolder /或rm aFolder -rf 但是在Mac上,你只能以第一种方式做到。
我知道FreeBSD / Mac和Ubuntu不同! 在Ubuntu中,大多数命令可以像“rm aFolder -rf”而不是ALL一样执行。 我也不是指所有的命令! 我想要的是如果有一种方法可以使“rm aFolder -rf”在Mac OS X中也能正常工作,就像Ubuntu一样,我觉得它会很方便
答案 0 :(得分:2)
在Unix命令中,默认值几乎总是参数优先,目录/文件名最后。实际上,Unix C
库有两个实用程序:getopt
和getopt_long
,几乎可以处理所有Unix命令。我知道在MS-DOS或Windows控制台中,参数可能会混淆:
C:> rd /s/q aFolder
C:> rd aFolder /s/q
那是因为command.exe
shell在文件扩展方面做的不多。如果命令进行任何扩展,则必须编写它们来执行此操作。
这是你在说的问题。想象一下,如果Unix命令可以采用两种方式参数:
$ touch -- -rf
$ mkdir aFolder
我创建了一个名为-rf
的文件和一个名为aFolder
的文件夹。
应该:
$ rm aFolder -rf
办?
它应该删除目录aFolder吗?它应该删除文件-rf
吗?是应该删除还是只删除其中一个?
在标准Unix中,不会删除aFolder(因为您没有在行上的第一个非parmameter名称之前指定-rf
参数。但是,文件-rf
将被删除使用GNU版本的rm
,恰恰相反。这非常非常糟糕。
Mac OS X是100%Unix,并且符合SUS 03.如果在GNU / Linux上允许某些内容,但在Mac上不允许,则归结于GNU中该工具的非标准实现。一些GNU实现很好。其他人,比如这个,我可以不用。
答案 1 :(得分:0)
不同的平台通常都有自己的核心工具实现,即使它们看起来是相同的,但它们通常都是完全不同的。
如果它困扰你,你几乎可以在任何地方忙碌:http://busybox.net
答案 2 :(得分:0)
如果您依赖Linux行为,则可以安装GNU coreutils软件包。我认为它可能与底层getopt()
实现有所不同,但GNU rm
的行为就像你描述Linux rm
一样,即使使用相同的libc也是如此。