私は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
サブシェルの出力全体を直接取得します。