bashでvarに複数行出力を割り当てるときに改行を有効にします。

bashでvarに複数行出力を割り当てるときに改行を有効にします。

私はWebからコピーし、非常に基本的なシェルスクリプトを使用してデータベースバックアップフォルダの内容を一覧表示し、定期的にメールで送信します。

MYSQLLIST=$(ls -lhG /var/backups/mysql/daily/)
SUBJECT="daily backup finished"
EMAIL="logging@localhost"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "dailybackup.sh ran successfully" > $EMAILMESSAGE
echo "MYSQL:" >> $EMAILMESSAGE
echo $MYSQLLIST >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

ただし、メールリーダーに関係なく、私が受信したメールには行間に改行がないlsため、メッセージを読むのは非常に困難です。ls -lhGシェルで実行したときと同じ改行文字を生成するにはどうすればよいですか?

ベストアンサー1

変数を埋めるコマンド置換を削除し、それをエコーし​​て直接出力をlsメッセージファイルにリダイレクトします。

SUBJECT="daily backup finished"
EMAIL="logging@localhost"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "dailybackup.sh ran successfully" > $EMAILMESSAGE
echo "MYSQL:" >> $EMAILMESSAGE
ls -lhG /var/backups/mysql/daily/ >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

編集する:このスクリプトをさらに整理すると、次のようにまったく同じ結果が得られます。

(
    echo "dailybackup.sh ran successfully"
    echo "MYSQL:"
    ls -lhG /var/backups/mysql/daily/
) | mail -s "Daily backup finished" "logging@localhost"

これはサブシェルでいくつかのコマンドを実行し、一時ファイルを作成せずにmailサブシェルの出力全体を直接取得します。

おすすめ記事