如何配置的bash处理CRLF shell脚本?(How can I configure bash

2019-07-19 00:45发布

我想执行的是发生在使用Windows / CRLF行结束的bash脚本。

我知道tofrodos包,以及如何fromdos文件,但如果可能的话,我想没有任何修改就可以运行它们。

有没有一个环境变量,将强制bash处理CRLF?

Answer 1:

也许是这样吗?

dos2unix < script.sh|bash -s

编辑:正如在评论中指出,这是更好的选择,因为它允许脚本运行DOS2UNIX的,并在子shell的bash不从标准输入读取:

bash <(dos2unix < script.sh)


Answer 2:

下面是你一个透明的解决方法:

cat > $'/bin/bash\r' << "EOF"
#!/bin/bash
script=$1
shift
exec bash <(tr -d '\r' < "$script") "$@"
EOF

这被允许您好像他们使用的UNIX EOL(与执行系统的所有Windows CRLF脚本消除这个问题一劳永逸./yourscript ),而不是将其指定为每个特定的调用。 (虽然小心: bash yourscriptsource yourscript仍然会失败)。

它的工作原理,因为DOS样式文件,从一个UNIX点,指定interpretter为“/斌/庆典^ M”。 我们覆盖该文件剥离从脚本回车和运行结果实际是bash。

您可以为不同的interpretters喜欢做同样的/bin/sh ,如果你想要的。



文章来源: How can I configure bash to handle CRLF shell scripts?