12

Windows/CRLF の行末をたまたま使用する bash スクリプトを実行したいと考えています。

tofrodos パッケージと how to ファイルについては知っていfromdosますが、可能であれば、変更せずに実行したいと考えています。

bash に CRLF の処理を​​強制する環境変数はありますか?

4

2 に答える 2

12

もしかして、こんな感じ?

dos2unix < script.sh|bash -s

編集: コメントで指摘されているように、サブシェルで bash を実行するのではなく、dos2unix を実行することでスクリプトが stdin から読み取ることができるため、これはより良いオプションです。

bash <(dos2unix < script.sh)
于 2013-01-30T17:54:07.283 に答える
8

透過的な回避策は次のとおりです。

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

于 2013-01-30T17:56:21.167 に答える