2012-03-16 21 views
20

私はCygwinで実行しているシェルスクリプトを持っています(おそらくこれが問題です)。 シェルスクリプトの出力ファイルに改行を追加する

echo "`date` User `whoami` started the script." >> output.log 
echo >> output.log 

しかしOutput.logですファイルは休憩を取るように見えることはありません。このコードのビットのために、私は単純に最初の行を書き込み、改行を追加します。スクリプトを複数回実行すると、2番目のエコーがファイルに書き込まれないかのようになります。

私も試してみた:

echo -e "`date` User `whoami` started the script.\n" >> output.log 

それは同じ結果が得られます。

奇妙なことは、ファイルに追加せずに上記の2番目のecho文をコマンドラインに入力するだけで、末尾に改行が付いた出力が得られることです。

+0

Strange。改行が追加されていないとどのように判断しますか? –

+0

実際、私は、ログインを開いているプログラムがLFを正しく解釈していないと思われ、Windowsの改行が予想されているようです。私が出力をキャッチするならば、それは休憩を尊重するようです。 – Ode

答えて

24

はCygwinがファイルにUnixの改行(LF)を書いている、とあなたがそれを開いているということですWindowsの行末(CRLF)を想定したプログラムで実行します。このケース—で、ハック回避策—試みのビットのためかどうかを判断するには:

echo "`date` User `whoami` started the script."$'\r' >> output.log 

(末尾の$'\r'は、余分なキャリッジリターンです。それに加え、Unixのラインが終わるなりますWindowsの行末で)。

あなたがI/Oリダイレクションなしでそれを行うことができます
+0

これは完全に機能しました。UnixとWindowsのラインの結びつきに関する仮説は問題であるように思われた – Ode

18

試してみてください。

echo "`date` User `whoami` started the script."$'\n' >> output.log 

またはちょうど:私は問題を賭けている

echo $'\n' >> output.log 
+0

コマンド置換は '$ '...''で実行されないので、バージョンは 'date'と' whoami 'を実行するのではなく、実際の文字列、バッククォートと "date"と "whoami" 'コマンド。 – ruakh

+0

@ruakh - 良いキャッチ。私はそれに気付かなかった。私は自分の答えを更新しました。 –

+0

"$ '\ n'は機能しませんでした。" $ '\ r'をruakhのソリューションから実行する必要がありました。どうもありがとう! – Ode

3

sed -i 's/$/\n/' filename 

ます。また、ファイルのリストに改行を追加するには、このコマンドを使用することができます。echoについては

find dir -name filepattern | xargs sed -i 's/$/\n/' filename 

、一部のシェルをこれをシェルの組み込みコマンドとして実装します。 -eオプションを受け付けていない可能性があります。 echoをまだ使用したい場合は、echoバイナリファイルの場所をwhich echoで調べてみてください。ほとんどの場合、それは/bin/echoにありますので、/bin/echo -e "\n"を使用して新しい行をエコーすることができます。

2

は、この複数回発行してみ

echo -en "`date` User `whoami` started the script.\n" >> output.log 

を試してみてください。私はあなたが同じ出力を探していることを願っています。

関連する問題