这个问题不是针对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的变量和环境不会留在父进程中。有什么用?
答案 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环境中执行该设置。