ユーザーが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