実行前に各コマンドをキャプチャして装飾します。

実行前に各コマンドをキャプチャして装飾します。

コマンドラインに入力するすべてのコマンドを傍受する必要があります。飾るそれらを。

echo Hiたとえば、私が実際に実行したいものを入力するたびに/bin/wrapper "echo Hi"

再コンパイルする以外に、bashでこれを達成する方法はありますか?

編集:また、for _ in 1 2; do ping -c1 google.com; done必要があります/bin/wrapper "for _ in 1 2; do ping -c1 google.com; done"

答え1

あなたはこれを行うことができますbash プリラン

スクリプトのダウンロード:

wget 'https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh'

スクリプトソース:

source 'bash-preexec.sh'

今その内容によると使用説明書:

2つの機能事前実行そして辞書コマンドこれで定義でき、存在する場合はbash-preexecによって自動的に呼び出されます。

preexecコマンドを読み、実行直前に直ちに実行します。ユーザーが入力した文字列は最初のパラメータとして渡されます。

precmd各プロンプトの前に実行します。 PROMPT_COMMANDと同じですが、より柔軟で柔軟です。

次のように使用できます。

preexec() { echo "just typed $1"; }

precmd() { echo "printing the prompt"; }

DEBUGbash-preexecは、トラップと環境変数を使用してPROMPT_COMMAND実装されたシェルスクリプトにすぎないことにも言及する価値があります。

トラップの詳細については、DEBUGコマンドのリファレンスドキュメントを参照してくださいtrap

環境変数の詳細については、PROMPT_COMMANDBashマニュアルを参照してください。

答え2

これは達成可能ですジッシュ。 Zshは、Bashのほぼ上位セットである言語を使用し、高度にカスタマイズ可能なUIを持つように設計された広く使用されているシェルです。

Zshでは、Enterキーを押したときに実行される任意の機能を定義できます。これにより、行の内容に対して任意の操作を実行できます。 (accept-lineウィジェットを参照)したがって、1つの解決策は代わりにZshを使用することです。

関連情報