シェルにフック型システムはありますか?

シェルにフック型システムはありますか?

私は特定の仕事を特定の順序でするのが好きであることに気づきました。

私の考えでは、フックは基本的に「イベントの後に何かをすること」です。ここで、イベントは、または他のgit cloneコマンドなどのパラメータを持つコマンドです。git submodule addcdrm

git add私は「もし、したら」と言いたいですgit status。たとえば、私はいつも、およびをgit add X; git status持っており、cd X; ls -la私のワークフローで自動化したい同様の組み合わせをもっと考えることができます。

alias \ functionを使用できない3つの理由があります。簡単にここで働く:

  1. これ不可能だと思う最大の理由簡単に実行されたことは、いくつかの関数定義があり、既存の関数を使い続けながら上書きする方法が見つからなかったことです。

私が意味するものを説明するために例を使用します。私はNathan Broadbentによって書かれたいくつかのzshスクリプトを使用しています。マイクロコントローラブリーズ- スクリプトはタスクを実行するgit()関数を追加します。

それでは、ワークフローを自動化し、前のコマンドで作成された各ワークフローの後にディレクトリをgit clone持つようにしたいとしましょう。cd実行方法は次のとおりです。)。そのために git() 関数を使いましょう。そうですか?

この機能は SCM Breeze コマンドより優先され、SCM Breeze は使用できません。

  1. エイリアスは私に何かを覚えておくように頼みます。私はこれが自動的に起こりたいです。
  2. メンテナンスが容易ではない- すべてのコマンドを手動でオーバーライドしようとしましたが、内容を変更するのは本当に面倒で、複雑さのために考えることができるすべての組み合わせに対して実行することがわかりません。

役に立つ場合は、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ログインするたびにロードできます。

関連情報