どのコマンドが実行されているかを検出し、現在のコマンドの後に追加のコマンドを実行する方法

どのコマンドが実行されているかを検出し、現在のコマンドの後に追加のコマンドを実行する方法

私はシェルが特定のコマンドを実行したことを検出し、そのコマンドを実行した後に別のコマンドを実行したいと思います。

例: 毎回コマンドを実行する場合:git commit -m " "

まず、上記のコマンドを完了してから、次のような他のコマンドを実行してください。python check.py

ファイルを変更することを好みます.bash_rc。私は正しいですか?

よろしくお願いします。

ベストアンサー1

trapBashでこのコマンドを使用してください。

トラップ[-lp] [[arg] sigspec...]

sigspecがDEBUGの場合、argコマンドはすべての単純コマンドの前に実行されます。

唯一の問題は、トラップコマンドがこのコマンドの後ではなく以前に実行されることです。ただし、これを使用して実行するコマンドを参照し、$BASH_COMMANDそのコマンドが実行されるのを防ぎます。

外部デバッグ

  1. 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

おすすめ記事