2012-05-04 26 views
3

说的是,我想在shell中删除一个tmp/ dir。shell:我可以在mac中使用类似linux的命令样式`rm tmp/-fr`

在linux(如ubuntu)中,我可以rm tmp/ -frrm -fr tmp/。但在mac中,我只能rm -fr tmp/

有什么办法可以配置mac shell(bash/zsh/...),所以我可以使用类似linux的命令风格:rm tmp/ -fr

+0

你是什么意思的其他“UNIX”。 UNIX是一个品牌,而不是操作系统(Solaris,AIX,HP/UX等)。 –

+0

我把它解释成'linux'(ubuntu,红帽等) – smilingpoplar

回答

4

具有操作数之后的选项,如rm tmp/ -fr是非标准的。 IEEE标准1003.1-2001具有在部分12.2 Utility Syntax Guidelines

Guideline 9: All options should precede operands on the command line.

的GNU工具的实现者(如所使用的大多数Linux发行)都选择添加许多非标准扩展。虽然有时很方便,但使用这些提示本质上是不可移植的。 MacOS X有一个派生自BSD的用户级,它没有大部分非标准的GNU扩展。如果您希望将来可以使用非GNU系统(如BSD,Solaris或任何其他商用UNIX),那么坚持使用标准语法的实用程序并不习惯任何GNU扩展。在使用所有不同的UNIX操作系统时,它可以节省很多麻烦。编写脚本时,这一点尤其重要。依靠脚本中的GNU语法将使它们不可移植。

因此,我的建议不是在MacOS X上安装GNU coreutils,而是使用它作为适应标准语法(IEEE Std 1003.1,POSIX.2等)的机会。

+0

+1:如果没有别的,为您的最终建议。 –

+0

很好的解释:) – smilingpoplar

0

它通常取决于您执行的命令的执行情况。然而,至于rm(因为你的意思是rm),因为你用它作为例子,所以你不能。至少它不会做你的想法。

  • rm -fr tmp/:将删除目录tmp/与选项-r-f,这样循环(这里强制)和强迫。
  • rm tmp/ -fr:将(尝试)删除目录tmp/和/或文件/目录 ,命名为-fr,但会产生错误:​​。

:唯一的其他方式来删除一个名为-rf文件是使用rm -- -rf

+0

那么,它受BSD的限制? – smilingpoplar

+0

也许,也许不是。我没有可用的BSD或Linux操作系统。然而,他们各自的手册页只能找到,这表明在那里甚至是不可能的。因人而异。 –

3

这取决于您使用的命令。 OS X来自BSD家族(通过NeXTSTEP),所以他们的标准实用程序大多是从BSD下降的。 BSD和Linux风格的命令之间有很大程度的兼容性,但每隔一段时间你都会遇到像这样的特定于实现的事情。如果您确实想使用Linux版本的命令,则可以安装GNU coreutils软件包。它可从Homebrew(推荐)和MacPorts获得。但是,通常,由于命名冲突等原因,将GNU coreutils安装在内置的BSD工具链上是一种痛苦。