2012-05-04 58 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工具鏈上是一種痛苦。