ログストアのバックアップ用のbashスクリプトを作成しています。
私は次のように定義した関数を使用します。
logit () { echo " $1 $2 " >> /path/to/log }
なぜなら、
logit 'Starting Backup' $(date +'%D %T')
私は次のような結果を得たからです。Starting Backup 01/11/22
だから時間が経ち、明らかに
stdout
機能が短縮されました。それで
echo $(date +'%D %T')
私も時間を得ましたstdout
。また、次のログ機能を使用したいと思います。
logit 'DB-LOGS' $(cat /path/to/sql)
明らかにする
DB-LOG mysqldump:
ここでもいくつかの標準出力がありません。
完全な出力を得るには、関数に何を変更または追加する必要がありますか?
答え1
二重引用符コマンドの置換:
logit 'Starting Backup' "$(date +'%D %T')"
引用符がない場合、結果は$(date ...)
単語で区切られ、ファイル名はワイルドカードで表示されます。短縮なし:$IFS
まだデフォルト値(空白文字を含む)に設定されていると仮定すると、日付と時刻が別の引数として関数に渡されるため、$3
最終的に時間が使用されなくなります。
答え2
"$*"
スクリプトでを使用して、すべてのパラメータを1つの文字列に連結できます。
logit () {
echo " $* " >> /path/to/log
}
("$*"
最初の文字をIFS
連結文字として使用し、デフォルトは空白です。)
または、各引数の周りに余分な空白が必要な場合は、次のようにprintf
使用します"$@"
。
logit () {
{ printf " %s " "$@"; echo; } >> /path/to/log
}
(ここでは"$@"
各引数を個別に拡張し、必要printf
に応じてフォーマット文字列を繰り返します。echo
最後の改行を追加します。)