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

时间:2015-10-26 15:30:26

标签: linux unix sh

我正在更新一个使用符号链接后面的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不是目录),或者它在所有平台上都是可靠的。

两个问题:

  1. 在所有平台上使用find/dev/null可靠吗?
  2. 原始find问题的任何其他解决方案,其中某些平台需要-L但其他平台需要-follow

1 个答案:

答案 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 ...

必要时。

最后,记录您可以支持的知道的平台以及如何在这些平台上正确运行脚本。其他平台的用户应该只能自己运行脚本。