我正在更新一个使用符号链接后面的find命令的shell脚本:
find -L somedir ...
但是,在某些较旧的平台上,不支持-L,并且该命令必须使用较旧的-follow语法:
find somedir -follow ...
在新系统上不推荐使用“-follow”标志,因此我的策略是测试该命令是否与较新的-L标志一起使用,如果没有回退到-follow标志。
该脚本目前在RedHawk 5.4.11上运行,但在较旧的Linux版本上发现find
不兼容。我被指示在所有Unix / Linux平台上完成这项工作。
因此,在创建虚拟find
命令进行测试时,我在/tmp
中创建一个空的临时目录,以便find
命令快速返回。然后我发现旧系统不支持mktemp -d
,所以我打算用老式的方式创建一个。
然后我突然意识到,“为什么不尝试/dev/null
作为临时目录而不是创造一个呢?”所以我尝试了命令:
TEMPDIR=/dev/null
FIND_L_SUPPORTED=`find -L $TEMPDIR &> /dev/null; echo $?`
它似乎有用,但我不确定为什么(因为/dev/null
不是目录),或者它在所有平台上都是可靠的。
两个问题:
find
对/dev/null
可靠吗?find
问题的任何其他解决方案,其中某些平台需要-L
但其他平台需要-follow
?答案 0 :(得分:0)
尝试支持未知平台的效率不高。仅仅因为你得到一个非标准方面(例如,用-L
替换-follow
)并不意味着没有其他非标准行为你不知道可能导致你的脚本打破。
相反,默认情况下编写脚本以支持标准,但提供一个标记,用户可以明确设置该标记以支持已知的旧平台。例如,
if [ "$NON_STANDARD_FIND" = "no-L" ]; then
find somedir -follow ...
else
find -L somedir ...
fi
然后将脚本作为
运行my_script ...
或
NON_STANDRD_FIND=no-L my_script ...
必要时。
最后,记录您可以支持的知道的平台以及如何在这些平台上正确运行脚本。其他平台的用户应该只能自己运行脚本。