说,我想在 shell 中删除一个tmp/目录。
在 linux(如 ubuntu)中,我可以rm tmp/ -fr
或rm -fr tmp/
. 但在 mac 中,我只能rm -fr tmp/
.
有没有办法配置mac shell(bash/zsh/...),所以我可以使用类似linux的命令样式:rm tmp/ -fr
?
说,我想在 shell 中删除一个tmp/目录。
在 linux(如 ubuntu)中,我可以rm tmp/ -fr
或rm -fr tmp/
. 但在 mac 中,我只能rm -fr tmp/
.
有没有办法配置mac shell(bash/zsh/...),所以我可以使用类似linux的命令样式:rm tmp/ -fr
?
在操作数之后有选项rm tmp/ -fr
是非标准的。IEEE Std 1003.1-2001 在第12.2 节实用程序语法指南中有:
准则 9:所有选项都应在命令行上的操作数之前。
GNU 实用程序(大多数 Linux 发行版使用)的实现者选择添加许多非标准扩展。虽然有时很方便,但使用这些扩展本质上是不可移植的。MacOS X 有一个从 BSD 派生的用户空间,它没有大多数非标准 GNU 扩展。如果您希望将来使用非 GNU 系统,例如 BSD、Solaris 或任何其他商业 UNIX,那么坚持实用程序的标准语法而不习惯任何 GNU 扩展确实是值得的。在使用所有不同的 UNIX 操作系统时,它节省了很多麻烦。这在编写脚本时尤其重要。在脚本中依赖 GNU 语法会使它们无法移植。
因此,与其在 MacOS X 上安装 GNU coreutils,我的建议是使用它作为习惯标准语法(IEEE Std 1003.1、POSIX.2 等)的机会。
它通常取决于您执行的命令的实现。但是,至于rm
(假设您的意思是rm),因为您将其用作示例,所以您不能。至少它不会像你想的那样做。
rm -fr tmp/
: 将删除tmp/
带有选项-r
和的目录-f
,因此是递归的(这里是强制性的)和强制的。rm tmp/ -fr
: 将(尝试)删除目录tmp/
和/或名为 的文件/目录-fr
,但会产生错误:rm: tmp/ directory
。注意:删除名为的文件的唯一其他方法-rf
是使用rm -- -rf
.