特定のコマンドを実行した後にスクリプトを実行する

特定のコマンドを実行した後にスクリプトを実行する

スクリプトのリストがあります。

  • ./myscript <param> | grep "asd"

  • ./myotherscript <param> <param> > file

  • ...

リスト内のコマンドの1つが実行され、完了したときに他のスクリプトを自動的に実行するにはどうすればよいですか?

ベストアンサー1

特定のコマンドの後に特定のタスクを自動的に実行するさまざまな方法があります。

機能

特定のコマンドの名前を付けた関数を作成し、その特定のコマンドを実行します。私はこれが最も簡単でクリーンな解決策だと思います。

function myotherscript() {
   command myotherscript "$@"
   other_command_to_be_executed
}

扱いにくい

precmdzshを使用すると、プロンプトの前に実行される関数を作成できます。これにより、他のコマンドを実行できますが、実行するコマンドを直接決定する必要があります。

function precmd() {
   last_cmd=$(history -1 |  sed -e "s/^[ ]*[0-9]*[ ]*//g")
   case "$last_cmd" in
   *myscript*) other_command;;
   *myotherscript*) other_other_command;;
   esac
}

強く打つ

BashにはPROMPT_COMMAND独自の機能を実装できるprecmd変数があります。これを使用するには、プロンプトの前に実行されるコマンドに設定する必要があります。

PROMPT_COMMAND="${PROMPT_COMMAND};bash_precmd"

function bash_precmd() {
  last_command=$(history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g")
  case "$last_command"  in
  *pattern*) command ;;
  esac
}

bashを使っていて、似たようなものを使いたいpreexecか、precmd見たいのならbashを使用したprecmdとpreexec

おすすめ記事