Command-Line-Interface
如何檢查基於 unix 的系統是否支持命令上的特定選項(mv -T)
我正在開發一個想要以原子方式更新符號連結的部署腳本。我打算使用類似的命令
$ ln -s new current_tmp && mv -Tf current_tmp current
(歸功於此處以獲取有關此工作原理的詳細資訊)。
但是,並非所有版本都
mv
支持該-T
選項。如何在使用之前可靠地確定係統是否支持它?是否比創建不同的文件並嘗試
mv
使用該-T
選項(並檢查是否成功)來嘗試該文件更好的方法,以便我可以知道目前系統是否支持該選項?然後我可以為該系統執行正確的命令。謝謝你的幫助。
一般來說你可以
- 通過不依賴超出每個 UNIX 支持的特定擴展來編寫可移植程式碼(這是一個 PITA,因為只有
-f
and-i
選項是強制性的mv
,其他實用程序也存在類似的限制……)- 大多數人只有有限的作業系統和版本選擇,不需要編寫真正通用的腳本,只需在部署工具中確定您正在處理的主要版本並採取相應措施即可。類似於
facter
Puppet 中已經為您提供的工具。- 假設存在某個功能並在您的命令失敗時擷取錯誤(無論如何您都應該這樣做),然後回退到解決方法。
- 事先檢查命令的版本字元串。
如果
-T
or--no-target-directory
功能特定於 GNU coreutils 版本,mv
您可以在引入 git 時檢查它,找到 2004,然後確定您需要比 12 年前發布的 5.2.1 更新的 coreutils 版本。.