私は特定の仕事を特定の順序でするのが好きであることに気づきました。
私の考えでは、フックは基本的に「イベントの後に何かをすること」です。ここで、イベントは、または他のgit clone
コマンドなどのパラメータを持つコマンドです。git submodule add
cd
rm
git add
私は「もし、したら」と言いたいですgit status
。たとえば、私はいつも、およびをgit add X; git status
持っており、cd X; ls -la
私のワークフローで自動化したい同様の組み合わせをもっと考えることができます。
alias \ functionを使用できない3つの理由があります。簡単にここで働く:
- これ不可能だと思う最大の理由簡単に実行されたことは、いくつかの関数定義があり、既存の関数を使い続けながら上書きする方法が見つからなかったことです。
私が意味するものを説明するために例を使用します。私はNathan Broadbentによって書かれたいくつかのzshスクリプトを使用しています。マイクロコントローラブリーズ- スクリプトはタスクを実行するgit()関数を追加します。
それでは、ワークフローを自動化し、前のコマンドで作成された各ワークフローの後にディレクトリをgit clone
持つようにしたいとしましょう。cd
実行方法は次のとおりです。)。そのために git() 関数を使いましょう。そうですか?
この機能は SCM Breeze コマンドより優先され、SCM Breeze は使用できません。
- エイリアスは私に何かを覚えておくように頼みます。私はこれが自動的に起こりたいです。
- メンテナンスが容易ではない- すべてのコマンドを手動でオーバーライドしようとしましたが、内容を変更するのは本当に面倒で、複雑さのために考えることができるすべての組み合わせに対して実行することがわかりません。
役に立つ場合は、OhMyZshでZSHを使用しています。
今私はこれを行うためにbashスクリプト(別名と関数)を使っていますが、今私がやっていることは他の人が実行する可能性が最も高いようです。これを行うプロジェクトについて知っている人はいますか? 「フック」をきちんとした方法で宣伝するのに役立ちますか?
答え1
あなたに役立つことができるもの:
フックpreexec
関数は、各コマンドラインが実行される前に呼び出されます(各コマンドの前ではありません)。
preexec() echo will execute: $1
precmd
各プロンプトの前に。
precmd() echo executed: $history[$[HISTCMD-1]]
次のように機能を拡張できます。
functions[git]='
(){ '$functions[git]'; } "$@"; local myret=$?
do-extra-stuff
return $myret'
または:
functions[git-old]=$functions[git]
git() {
git-old "$@"
local myret=$?
do-extra-stuff || return $myret
}
このDEBUG
トラップはすべてのコマンドの後に実行されます。
trap 'echo $ZSH_DEBUG_CMD returned with $?' DEBUG
ウィジェットをオーバーライドしてaccept-line
(マッピングEnter)ウィジェット内で操作を実行できます。
accept-line() {
zle -R "going to run: $BUFFER"
sleep 1
zle .$WIDGET
}
zle -N accept-line
答え2
私が知っている限り、あなたが説明するものと同様に機能する施設はありません。しかし、あなたが望むことを達成するために、Bashでエイリアスや関数を作成することは可能です。これは、説明するのと同様に聞こえます。
はい
関数として
$ function mygadd() { git add "$@"; }
$ function mcd() { cd "@"; ls -la; }
エイリアスとして
$ alias mycmd='cmd1; cmd2;'
メモ:エイリアスを使用すると、位置パラメータを渡すことはできません。エイリアス呼び出しに引数を含めて引数を擬似的に渡し、シェルから単一のコマンドラインに展開できます。
はい
$ alias somecmd='ls -la'
$ somecmd dir1 dir2
上記のコードが呼び出されますが、ls -la dir1 dir2
これら2つのパラメータはエイリアスに渡されず、代わりにls -la dir1 dir2
コマンドラインが評価され実行されるとエイリアスが拡張されます。
どちらも構成ファイルにマージされ、$HOME/.bashrc
ログインするたびにロードできます。