特定のコマンドの特定のパラメーターの追跡

特定のコマンドの特定のパラメーターの追跡

git branchたとえば、(常にいくつかの単語で構成される)コマンドがあるとします。

私が望むのは、このコマンドが引数で実行されるタイミングを追跡することです。たとえば、エラーなしでコマンドを実行した場合は、それをファイルとしてgit branch develop保存したいと思います。develop

私は次のようにgitコマンドをオーバーライドしようとしました.bash_profile

git () {
    if [ $# -eq 3 ]
    then
        git $@
        echo $2 > /path/tacked_parameters.txt
    else
        git $@
    fi
}

しかし、それほどうまくいかないようです。これを行う方法はありますか?

答え1

ここにいくつかの問題があります。

  • あなたのgit関数は元のコマンドの代わりに再帰的に自分自身を呼び出していますgit
  • 引用符なしで使用しているので$@言葉にならない。
  • 誰ですか他の変数は引用符なしでそのままにしてください。、シェルで分割+ワイルドカードが必要です。
  • 誰ですかecho任意のデータの場合
  • 元のコマンドの終了ステータスが失われますgit
  • 呼び出すたびにログファイルが上書きされます。
  • 関数定義に関数定義を置きます~/.bash_profile。これは、シェル以外のログインセッションをカスタマイズすることを意味し、通常はログイン以外の呼び出しbashでは読み込まれません。

あなたは次のようなものが欲しい:

git() {
  if [ "$#" -eq 3 ]
  then
    local ret
    command git "$@"; ret=$?
    printf '%s\n' "$2" >> /path/tacked_parameters.txt
    return "$ret"
  else
    command git "$@"
  fi
}

それは:

  • 変数を引用するには、
  • command走るためにgit 注文する
  • 終了ステータスをgitローカル変数に保存し、終了時に返します。
  • ログファイルにリダイレクトする>>代わりに使用してください。>
  • printf代わりに使用してくださいecho
  • ~/.bashrc(ログインシェルはデフォルトで読み取られていないため、~/.bash_profileソースがあることを確認してください(バグ/バグ機能))。関数をエクスポートしたくない場合や、(使用)関数を呼び出すスクリプトを呼び出す必要がある場合があります。~/.bashrcbash~/.bashrcbashgitexport -f gitbashgit

関連情報