編集:この質問はもともとbash固有のものでした。私はまだbashソリューションが欲しいのですが、別のシェルでこれを行う良い方法があれば、それも知っておくと便利です!
さて、問題のトップレベルの説明です。たとえば$cat foo | sort -n | less
、ユーザーが入力すると、これが傍受されてに変換されるように、bash にフックを追加できるようにしたいと考えていますwrapper 'cat foo | sort -n | less'
。各コマンドの前後にコマンドを実行する方法 (DEBUG トラップまたは PROMPT_COMMAND などを使用) を見てきましたが、各コマンドを傍受して別のプロセスで処理できるようにする方法については何もありません。これを行う方法はありますか?
人々がそれにアプローチする方法について他の提案を持っている場合に備えて、私がこれをやりたい理由の説明について:
スクリプトなどのツール端末で行うすべてのことをログに記録できます (ある程度、bash の履歴と同様)。ただし、スクリプトは入力と出力を 1 つの大きな文字列に混ぜ合わせて、画面を引き継ぐ vi などのアプリケーションと混同し、履歴は入力された生のコマンドのみを提供し、どちらも機能しません。同時に複数の端末にコマンドを入力している場合。私がやりたいのは、より豊富な情報をキャプチャすることです。例として、コマンド、実行時間、完了時間、終了ステータス、stdin と stdout の最初の数行です。また、これを、複数の端末をうまく多重化できるリスニングデーモンに送信することもお勧めします。
これの動機は、事後の手順のような探索的データ分析を理解しようとすることにあります。このようなより豊富な情報があれば、何が起こったのかについて適切なレポートを生成し、1 つのコマンドの複数の呼び出しを 1 つにまとめて、最初のいくつかがゼロ以外の終了を返し、ファイルに触れたすべてのものを検索してファイルがどこから来たのかを尋ねることが可能になります。などなど