用于在脚本

时间:2015-05-12 03:03:58

标签: bash cygwin subshell

这个问题不是针对cygwin的。但是,在cygwin邮件存档https://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html中有各种指令用于设置cygwin特定的igncr shellopt变量,其中一个是指令:

  

4A。对于单个受影响的脚本,请在...之后添加此行   she-bang:〜(set -o igncr)2> / dev / null&& set -o igncr; #comment是   需要

我知道set -o igncr在SHELLOPTS中设置了igncr。但是,我不明白为什么指令还包括在子shell中调用它。根据我的理解,子shell的变量和环境不会留在父进程中。有什么用?

1 个答案:

答案 0 :(得分:1)

此命令中的详细信息

(set -o igncr) 2>/dev/null && set -o igncr

是上下文。

想象一下设计为在非Windows机器和cygwin上运行的shell脚本。

通常(不在cygwin下)使用set -o igncr会出错(正如尝试设置任何其他无效的set选项一样。

然而,在cygwin下,set既有意义又有帮助。

那么你如何编写一个在这两个地方运行的脚本?您需要对当前环境进行测试。您可以检查特定的环境变量,特定路径等。(这类似于远离浏览器嗅探和功能测试)您可以检查当前环境是否支持该选项你正试图设置。

所以尝试设置它但是如果它不起作用则抛出错误,所以尝试在子shell中设置它(并将错误输出抛到/dev/null以忽略它)然后如果(和仅当)设置成功(&&)然后在当前shell环境中执行该设置。