85336
LinuxのCLI環境で、特定のコマンド実行後にメッセージを表示したいのですが、何かいい方法はございますでしょうか？

例1)git addした直後に、「xxの修正はyyブランチでお願いします」などの警告を表示

調べている最中なのですが、もし方法をご存知でしたらご教授いただけたら幸いです。
CC BY-SA 4.0
2021-12-26T02:31:38.237
85332
2021-12-26T03:36:03.497
2021-12-26T03:03:02.200
19110
39448
question
linux
Linux環境で特定のコマンド実行後にメッセージを表示する方法はありますか？
シェル依存になりますが，Zsh や Bash などの今日よく使われているシェルにはフック登録の機能があるので，これらを利用すれば実現できそうです．

具体的には，プロンプトを表示する前に実行されるフックに `precmd` というのがあるので，これを利用します．例えば Zsh の場合は，実行したい処理を
`my_hook_func` 関数として定義してあるものとして

```

    autoload -Uz add-zsh-hook
    add-zsh-hook precmd my_hook_func
    
```

とすれば結果的に毎回のコマンド実行後に `my_hook_func` が実行されることになります．Bash の場合も [bash-
preexec](https://github.com/rcaloras/bash-preexec) というものを使うと似たようなことができるようです．

フック処理において，直前に実行されたコマンドは `$(fc -ln -1)`
などとすれば取り出すことができるので，こうした方法を用いて所望の動作を行えば良さそうです．`git add` を検知する簡単な例ですが：

```

    my_hook_func() {
      local prev_cmd="$(fc -ln -1)"
      if [[ $(echo $prev_cmd | cut -d" " -f 1) = git ]]; then
        if [[ $(echo $prev_cmd | cut -d" " -f 2) = add ]]; then
          echo "git-add has been executed!"
        fi
      fi
    }
    
```

上記を実用するには，シェル起動時の最初にフックが実行される場合は除外するなど，もう少し細かなケアが必要になるかと思います．
CC BY-SA 4.0
2021-12-26T03:36:03.497
85336
2021-12-26T03:36:03.497
27047
85332
answer