スクリプトのリストがあります。
./myscript <param> | grep "asd"
./myotherscript <param> <param> > file
...
リスト内のコマンドの1つが実行され、完了したときに他のスクリプトを自動的に実行するにはどうすればよいですか?
答え1
特定のコマンドの後に特定のタスクを自動的に実行するさまざまな方法があります。
機能
特定のコマンドの名前を付けた関数を作成し、その特定のコマンドを実行します。私はこれが最も簡単でクリーンな解決策だと思います。
function myotherscript() {
command myotherscript "$@"
other_command_to_be_executed
}
扱いにくい
precmd
zshを使用すると、プロンプトの前に実行される関数を作成できます。これにより、他のコマンドを実行できますが、実行するコマンドを直接決定する必要があります。
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