Linux 我可以为find命令使用/dev/null吗?

Linux 我可以为find命令使用/dev/null吗?,linux,unix,sh,Linux,Unix,Sh,我正在更新一个shell脚本,该脚本使用符号链接后面的find命令: find -L somedir ... 但是,在一些较旧的平台上,不支持-L,并且命令必须使用较旧的-follow语法: find somedir -follow ... 在较新的系统上,不推荐使用-follow标志,因此我的策略是测试命令是否与较新的-L标志一起工作,如果没有,则使用-follow标志 该脚本目前在RedHawk 5.4.11上运行,但在较旧的Linux版本上发现了查找不兼容。我被要求在所有Unix/Li

我正在更新一个shell脚本,该脚本使用符号链接后面的find命令:

find -L somedir ...
但是,在一些较旧的平台上,不支持-L,并且命令必须使用较旧的-follow语法:

find somedir -follow ...
在较新的系统上,不推荐使用-follow标志,因此我的策略是测试命令是否与较新的-L标志一起工作,如果没有,则使用-follow标志

该脚本目前在RedHawk 5.4.11上运行,但在较旧的Linux版本上发现了查找不兼容。我被要求在所有Unix/Linux平台上都能做到这一点

因此,在创建要测试的伪find命令时,我在/tmp中创建了一个空的temp目录,以便find命令快速返回。然后我发现旧系统不支持mktemp-d,所以我打算用老式的方式创建一个

然后我明白了,为什么不尝试将/dev/null作为临时目录而不是创建一个呢?所以我尝试了命令:

TEMPDIR=/dev/null
FIND_L_SUPPORTED=`find -L $TEMPDIR &> /dev/null; echo $?`
它似乎可以工作,但我不确定为什么,因为/dev/null不是目录,或者它在所有平台上都是可靠的

两个问题:

在所有平台上对/dev/null使用find是否可靠? 对于我最初的find问题,有些平台需要-L,而其他平台需要-follow,还有其他解决方案吗?
试图支持未知平台是没有成效的。仅仅因为你有一个非标准方面是正确的,例如,用-follow替换-L并不意味着没有其他你不知道的非标准行为会导致你的脚本崩溃

相反,在默认情况下编写脚本以支持该标准,但提供一个用户可以显式设置以支持已知旧平台的标志。比如说,

if [ "$NON_STANDARD_FIND" = "no-L" ]; then
    find somedir -follow ...
else
    find -L somedir ...
fi
然后按如下方式运行脚本:

my_script ...

必要时


最后,记录您知道可以支持的平台以及如何在这些平台上正确运行脚本。其他平台的用户运行您的脚本会有风险。

要查找的参数不是目录,而是路径。您认为-L不受欢迎的原因是什么?在一些较旧的平台上,-L不受支持,而在较新的系统上,-follow标志不受欢迎,这对我来说很有意义;-祝大家好运。祝O.P.:在所有平台上都可靠?这是一个很高的要求。与其希望您在这里收到的建议适用于您或您的客户环境中最古老、最坚硬的机器,不如构造一个肯定的断言测试,确认支持-L或-follow,否则脚本会失败,您希望这是Unix也不支持的极少数情况。如果失败消息清楚地说明了问题以及问题的触发位置,那么未来的维护人员将尊崇您的名字!也不是mktemp,为什么不只是mkdir-p路径?祝你好运。最后,find-L/dev/nullX生成一条错误消息并设置$?对1。这有用吗?祝你好运
NON_STANDRD_FIND=no-L my_script ...