gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:15 25 4
gpt4 key购买 nike

我正在更新一个 shell 脚本,它使用跟随符号链接(symbolic link)的 find 命令:

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. 针对 /dev/null 使用 find 在所有平台上是否可靠?
  2. 我原来的find 问题的任何其他解决方案,其中一些平台需要-L 但其他平台需要-follow

最佳答案

尝试支持未知平台是没有成效的。仅仅因为您获得了一个非标准方面的权利(例如,将 -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 ...

根据需要。

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

关于linux - 我可以使用/dev/null 作为 find 命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com