Mac上的Bash不能做** rm aFolder -rf **

时间:2012-03-19 14:16:46

标签: bash

在Linux上,你可以这样做 rm -rf aFolder / rm aFolder -rf

但在Mac上你只能做 rm -rf aFolder /

有人知道问题是什么,或者如何解决?


Linux中的大多数命令都可以双向执行 rm -rf aFolder /或rm aFolder -rf 但是在Mac上,你只能以第一种方式做到。

如果你在关注这个问题之前确实意识到这些差异,我就会徘徊。如果你可以在Ubuntu和Mac上试一试!

我知道FreeBSD / Mac和Ubuntu不同! 在Ubuntu中,大多数命令可以像“rm aFolder -rf”而不是ALL一样执行。 我也不是指所有的命令! 我想要的是如果有一种方法可以使“rm aFolder -rf”在Mac OS X中也能正常工作,就像Ubuntu一样,我觉得它会很方便

3 个答案:

答案 0 :(得分:2)

在Unix命令中,默认值几乎总是参数优先,目录/文件名最后。实际上,Unix C库有两个实用程序:getoptgetopt_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也是如此。