私はシェルが特定のコマンドを実行したことを検出し、そのコマンドを実行した後に別のコマンドを実行したいと思います。
例: 毎回コマンドを実行する場合:git commit -m " "
まず、上記のコマンドを完了してから、次のような他のコマンドを実行してください。python check.py
ファイルを変更することを好みます.bash_rc
。私は正しいですか?
よろしくお願いします。
ベストアンサー1
trap
Bashでこのコマンドを使用してください。
トラップ[-lp] [[arg] sigspec...]
sigspecがDEBUGの場合、argコマンドはすべての単純コマンドの前に実行されます。
唯一の問題は、トラップコマンドがこのコマンドの後ではなく以前に実行されることです。ただし、これを使用して実行するコマンドを参照し、$BASH_COMMAND
そのコマンドが実行されるのを防ぎます。
外部デバッグ
- DEBUGトラップによって実行されたコマンドがゼロ以外の値を返した場合は、次のコマンドをスキップして実行されません。
したがって、DEBUGトラップを設定し、目的のコマンドが検出されたらそれを実行して独自のコマンドを実行し、$BASH_COMMAND
元のコマンドが実行されないようにします。
編集する
次の例を試してください。
#!/bin/bash
function myfunc ()
{
if test "$BASH_COMMAND" = "echo 1"; then
$BASH_COMMAND
echo "runing after 'echo 1'"
return 1
else
return 0
fi
}
shopt -s extdebug
trap "myfunc" DEBUG
echo 1
echo 2
次のスクリプトを実行してください。
$ bash test.sh
1
runing after 'echo 1'
2