日付または猫のパラメータを完全に表示しないbash機能

日付または猫のパラメータを完全に表示しないbash機能

ログストアのバックアップ用の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最後の改行を追加します。)

関連情報