bashコマンドイベント(またはシェル)

bashコマンドイベント(またはシェル)

bashより良い方法で実行されたすべてのコマンドをキャプチャする方法はありますかsh

コマンドが実行されるたびに呼び出されるラッパースクリプトが必要です。入力するのと同じように、cd /home/ラッパースクリプトが呼び出されることを望みます。command_wrapper.sh内部でコマンドをキャンセルしたり、別のコマンドを呼び出したい。

#!/bin/sh
#command_wrapper.sh

echo "you tried to call the command [$@]"

コマンドが存在しない場合にのみスクリプトを呼び出すことは問題ありません。可能ですか?

答え1

DEBUGこれにはトラップを使用できます。このトラップには、$BASH_COMMAND最後に実行されたコマンドが含まれています。

trap 'echo "you tried to call the command [$BASH_COMMAND]"' DEBUG

プロンプトまたはコマンドを実行すると、$PROMPT_COMMANDそのコマンドでもトラップが実行されます。このような状況を避ける$BASH_COMMANDために、同じことを確認するためにチェックを追加できます。$PROMPT_COMMAND

コマンドが存在しないときに実行する場合、bashは、名前付きcommand_not_found_handle関数が存在する場合、コマンドが見つからない限り実行されます。実行したいコマンドラインに引数として渡されたすべての引数を使用して実行されるので、次のことができます。

command_not_found_handle() {
    echo "you tried to call the command [$@]"
}

その結果は次のとおりです。

$ foo bar
you tried to call the command [foo bar]
$

関連情報