.cshrc コマンド出力に改行を追加する

.cshrc コマンド出力に改行を追加する

ユーザーがFreeBSD 10にログインできるように「動的」motdを設定しようとしています。 .cshrcを使用していくつかの情報を出力するコマンドがあるように設定しました。ただし、そのうちの1つは改行を追加する代わりに1行で印刷されます。

echo 'Uptime: '`uptime`
echo ''`who -H | awk '{print $0,"\n"}'`

出力WHO別に行かずに一行で来てください。改行文字を追加するにはどうすればよいですか?\N各行の終わりに?ちょっと変えてみたsed同じですが、結果は同じです。

私はテストにtcshを使用しています。

答え1

あなたのアプローチには2つの問題があります。

1つ目は、コマンド置換の出力を引用しないことです。これにより、シェルはスペースに基づいて出力をトークン化し、各単語を別々の引数として渡し、すべての引数を1行に印刷しますecho。この問題に対する解決策は、コマンド置換を引用することです。たとえば、echo

echo "$(who -H | awk '{ print $0,"\n"}')"

2番目の問題はechoまったく必要ないということです。awkコマンドの出力を文字列としてキャプチャし、何もせずに再エコーします。だからこれはecho何の意味もありません。

ミニスクリプトを次に変換します。

echo "Uptime: $(uptime)"
who -H

awk行の追加以外は何もしなかったので削除しました。

これを行う他の方法があります。

echo -n "Uptime: "
uptime
who -H

関連情報