Command-Line-Interface

如何檢查基於 unix 的系統是否支持命令上的特定選項(mv -T)

  • August 19, 2016

我正在開發一個想要以原子方式更新符號連結的部署腳本。我打算使用類似的命令

$ ln -s new current_tmp && mv -Tf current_tmp current

(歸功於此處以獲取有關此工作原理的詳細資訊)。

但是,並非所有版本都mv支持該-T選項。如何在使用之前可靠地確定係統是否支持它?

是否比創建不同的文件並嘗試mv使用該-T選項(並檢查是否成功)來嘗試該文件更好的方法,以便我可以知道目前系統是否支持該選項?然後我可以為該系統執行正確的命令。

謝謝你的幫助。

一般來說你可以

  • 通過不依賴超出每個 UNIX 支持的特定擴展來編寫可移植程式碼(這是一個 PITA,因為只有-fand-i選項是強制性mv,其他實用程序也存在類似的限制……)
  • 大多數人只有有限的作業系統和版本選擇,不需要編寫真正通用的腳本,只需在部署工具中確定您正在處理的主要版本並採取相應措施即可。類似於facterPuppet 中已經為您提供的工具。
  • 假設存在某個功能並在您的命令失敗時擷取錯誤(無論如何您都應該這樣做),然後回退到解決方法。
  • 事先檢查命令的版本字元串。

如果-Tor--no-target-directory功能特定於 GNU coreutils 版本,mv您可以在引入 git 時檢查它,找到 2004,然後確定您需要比 12 年前發布的 5.2.1 更新的 coreutils 版本。.

引用自:https://serverfault.com/questions/797960