コマンドラインに入力するすべてのコマンドを傍受する必要があります。飾るそれらを。
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"; }
DEBUG
bash-preexecは、トラップと環境変数を使用してPROMPT_COMMAND
実装されたシェルスクリプトにすぎないことにも言及する価値があります。
トラップの詳細については、DEBUG
コマンドのリファレンスドキュメントを参照してくださいtrap
。
環境変数の詳細については、PROMPT_COMMAND
Bashマニュアルを参照してください。
答え2
これは達成可能ですジッシュ。 Zshは、Bashのほぼ上位セットである言語を使用し、高度にカスタマイズ可能なUIを持つように設計された広く使用されているシェルです。
Zshでは、Enterキーを押したときに実行される任意の機能を定義できます。これにより、行の内容に対して任意の操作を実行できます。 (accept-line
ウィジェットを参照)したがって、1つの解決策は代わりにZshを使用することです。