如何检查基于 UNIX 的系统是否支持命令上的特定选项(mv -T)

如何检查基于 UNIX 的系统是否支持命令上的特定选项(mv -T)

我正在编写一个部署脚本,希望自动更新符号链接。我打算使用如下命令

$ 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 版本。

相关内容