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]
$