mca*_*dre 12 linux windows bash line-endings
我想执行碰巧使用Windows/CRLF行结尾的bash脚本.
我知道tofrodos包,以及如何fromdos文件,但如果可能的话,我想在没有任何修改的情况下运行它们.
是否有一个环境变量会强制bash处理CRLF?
Mag*_*son 12
也许是这样的?
dos2unix < script.sh|bash -s
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所指出的,这是更好的选择,因为它允许脚本通过运行dos2unix而不是bash在子shell中读取stdin:
bash <(dos2unix < script.sh)
Run Code Online (Sandbox Code Playgroud)
这是一个透明的解决方法:
cat > $'/bin/bash\r' << "EOF"
#!/bin/bash
script=$1
shift
exec bash <(tr -d '\r' < "$script") "$@"
EOF
Run Code Online (Sandbox Code Playgroud)
通过允许您执行所有系统的Windows CRLF脚本,就像它们使用UNIX eol(with ./yourscript)一样,而不必为每个特定的调用指定它,这一劳永逸地解决了这个问题.(要注意:bash yourscript或者source yourscript仍然会失败).
它的工作原理是,从UNIX的角度来看,DOS样式文件将解释器指定为"/ bin/bash ^ M".我们覆盖该文件以从脚本中去除回车并在结果上运行实际的bash.
你也可以为不同的解释者做同样的事情/bin/sh.