Windows/CRLF の行末をたまたま使用する bash スクリプトを実行したいと考えています。
tofrodos パッケージと how to ファイルについては知っていfromdos
ますが、可能であれば、変更せずに実行したいと考えています。
bash に CRLF の処理を強制する環境変数はありますか?
Windows/CRLF の行末をたまたま使用する bash スクリプトを実行したいと考えています。
tofrodos パッケージと how to ファイルについては知っていfromdos
ますが、可能であれば、変更せずに実行したいと考えています。
bash に CRLF の処理を強制する環境変数はありますか?
もしかして、こんな感じ?
dos2unix < script.sh|bash -s
編集: コメントで指摘されているように、サブシェルで bash を実行するのではなく、dos2unix を実行することでスクリプトが stdin から読み取ることができるため、これはより良いオプションです。
bash <(dos2unix < script.sh)
透過的な回避策は次のとおりです。
cat > $'/bin/bash\r' << "EOF"
#!/bin/bash
script=$1
shift
exec bash <(tr -d '\r' < "$script") "$@"
EOF
./yourscript
これにより、システムのすべての Windows CRLF スクリプトを、特定の呼び出しごとに eol を指定するのではなく、UNIX eol ( を使用) を使用しているかのように実行できるようになるため、問題が完全に解消されます。(ただし、注意してください:bash yourscript
またはsource yourscript
まだ失敗します)。
UNIX の観点から見ると、DOS スタイル ファイルはインタープリターを "/bin/bash^M" として指定するため、これが機能します。そのファイルをオーバーライドして、スクリプトからキャリッジ リターンを削除し、結果に対して実際の bash を実行します。
必要に応じて、さまざまな通訳者に対して同じことを行うことができます/bin/sh
。