shell:我可以在mac中使用类似Linux的命令样式`rm tmp / -fr`

时间:2012-05-04 05:43:26

标签: macos shell command-line

说,我想在shell中重新启动 tmp / 目录。

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

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

3 个答案:

答案 0 :(得分:4)

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

部分中有
  

准则9:       所有选项都应位于命令行的操作数之前。

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

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

答案 1 :(得分:3)

这取决于您使用的命令。 OS X来自BSD系列(通过NeXTSTEP),因此它们的标准实用程序主要来自BSD。 BSD和Linux样式命令之间存在很大程度的兼容性,但每隔一段时间就会遇到像这样的特定于实现的事情。如果您真的想使用Linux版本的命令,可以安装GNU coreutils软件包。它可以从Homebrew(推荐)和MacPorts获得。但是,一般情况下,由于命名冲突等原因,将GNU coreutils安装在内置的BSD工具链上会很痛苦。

答案 2 :(得分:0)

一般来说,它取决于您执行的命令的实现。但是,至于rm(假设您的意思是rm),因为您使用它作为示例,您不能。至少它不会做你想象的。

  • rm -fr tmp/:将使用选项tmp/-r删除目录-f,以便递归(此处为强制)和强制。
  • rm tmp/ -fr:将(尝试)删除目录tmp/和/或文件/目录 名为-fr,但会产生错误:rm: tmp/ directory

注意:删除名为-rf的文件的唯一方法是使用rm -- -rf