2

我在 shell 脚本中阅读了以下语句:

(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

为什么有两个“未设置的 CDPATH”?最后一个可以删吗?

4

1 回答 1

3

第一个(unset CDPATH) >/dev/null 2>&1命令尝试取消设置CDPATH,但在子外壳(即括号)中这样做,错误和输出发送到/dev/null. 如果成功,那么它会在主 shell 中取消设置 CDPATH。如果它未能取消设置 CDPATH,那么它不会在主 shell 中尝试。这避免了有关无法取消设置 CDPATH 干扰使用它的配置脚本的输出的错误消息。

我不确定为什么或何时需要进行如此详尽的测试,但大概在某些机器上,某处,某个时间,该操作unset CDPATH是不允许的,并且与配置脚本的输出混为一谈。请注意,自动配置 shell 脚本相当奇怪——除了惯用的 shell 之外的任何东西——因为它们总体上非常便携。他们试图处理您从未听说过的系统的怪异之处,其中一些可能在您从小学毕业之前就已经过时了。许多测试的原因可能已经在时间的迷雾中消失了;曾经有一个系统需要绕开,但很可能是 20 年前在一个不再活跃使用的系统上。

于 2013-03-29T03:54:15.613 回答