次のスクリプトがあります。
/usr/bin/daily-execution
#!/bin/bash
log_folder=/var/log/hans-keeper
now=$(date +"%Y-%m-%d-%H:%M:%S")
if [ ! -d "/var/log/hans-keeper" ]
then
mkdir /var/log/hans-keeper
fi
target_file="$log_folder/$now"
exec_log(){
echo "executing $1 and log into: $target_file"
result=$(sudo $1)
echo "$1" >> $target_file
echo "-------------------------------------------------" >> $target_file
printf "%s\n" $result >> $target_file
echo "-------------------------------------------------" >> $target_file
echo "" >> $target_file
}
exec_log /usr/bin/hans-keeper
exec_log /usr/bin/move-sync-staging
/usr/bin/hans-keeper
以下のように複数行のエコーがあります。
echo "line 1"
echo "line 2"
echo "line 3"
しかもmove-sync-staging
。
/usr/bin/hans-keeper
シェルから直接実行すると、次のように印刷されることが確認されました。
line 1
line 2
line 3
ただし、結果からログファイルを開くと、/usr/bin/daily-execution
次のように印刷されます。
line 1line 2line 3
/usr/bin/hans-keeper
シェルから直接スクリプトを実行すると、出力に改行文字が含まれていないようです。
この問題を解決し、スクリプトを改善するのを手伝ってくれてありがとう。
答え1
echo "executing $1 and log into: $target_file" result=$(sudo $1) echo "$1" >> $target_file echo "-------------------------------------------------" >> $target_file printf "%s\n" $result >> $target_file echo "-------------------------------------------------" >> $target_file echo "" >> $target_file
引用されていない拡張が$result
理由です。{ cmd1; cmd2 } >> file
別のリダイレクトの代わりに使用してください。
exec_log() {
echo "executing $1 and log into: $target_file"
{
echo "$1"
echo "-------------------------------------------------"
sudo "$1"
echo "-------------------------------------------------"
echo ""
}>> "$target_file"
}