我想执行的是发生在使用Windows / CRLF行结束的bash脚本。
我知道tofrodos包,以及如何fromdos
文件,但如果可能的话,我想没有任何修改就可以运行它们。
有没有一个环境变量,将强制bash处理CRLF?
我想执行的是发生在使用Windows / CRLF行结束的bash脚本。
我知道tofrodos包,以及如何fromdos
文件,但如果可能的话,我想没有任何修改就可以运行它们。
有没有一个环境变量,将强制bash处理CRLF?
也许是这样吗?
dos2unix < script.sh|bash -s
编辑:正如在评论中指出,这是更好的选择,因为它允许脚本运行DOS2UNIX的,并在子shell的bash不从标准输入读取:
bash <(dos2unix < script.sh)
下面是你一个透明的解决方法:
cat > $'/bin/bash\r' << "EOF"
#!/bin/bash
script=$1
shift
exec bash <(tr -d '\r' < "$script") "$@"
EOF
这被允许您好像他们使用的UNIX EOL(与执行系统的所有Windows CRLF脚本消除这个问题一劳永逸./yourscript
),而不是将其指定为每个特定的调用。 (虽然小心: bash yourscript
或source yourscript
仍然会失败)。
它的工作原理,因为DOS样式文件,从一个UNIX点,指定interpretter为“/斌/庆典^ M”。 我们覆盖该文件剥离从脚本回车和运行结果实际是bash。
您可以为不同的interpretters喜欢做同样的/bin/sh
,如果你想要的。