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
ソースがあることを確認してください(バグ/バグ機能))。関数をエクスポートしたくない場合や、(使用)関数を呼び出すスクリプトを呼び出す必要がある場合があります。~/.bashrc
bash
~/.bashrc
bash
git
export -f git
bash
git