我正在编写一个部署脚本,希望自动更新符号链接。我打算使用如下命令
$ ln -s new current_tmp && mv -Tf current_tmp current
(归功于这里了解其工作原理的详细信息)。
但是,并非所有版本都mv
支持该-T
选项。如何在使用前可靠地确定系统是否支持该选项?
mv
有没有比创建一个不同的文件并尝试使用该选项-T
(并检查是否成功)更好的方法,以便我可以知道当前系统是否支持该选项?然后我可以为该系统运行正确的命令。
感谢您的帮助。
答案1
一般来说你可以
- 通过不依赖每个 UNIX 都支持的特定扩展来编写可移植代码(这是一个 PITA,因为只有
-f
和-i
选项是授权对于mv
其他实用程序也存在类似的限制...) - 大多数人只有有限的操作系统和版本选择,不需要编写真正通用的脚本,只需确定部署工具中要处理的主要版本并采取相应措施即可。类似于
facter
已经在 Puppet 中为您完成了。 - 假设存在一个功能,并在命令失败时捕获错误(无论如何你都应该这样做),然后回到解决方法。
- 事先检查命令的版本字符串。
如果-T
或--no-target-directory
功能特定于 GNU coreutils 版本,mv
您可以在引入时检查 git,找到 2004 然后确定您需要比十二年前发布的 5.2.1 更新的 coreutils 版本。