1つのスクリプトからすべてのコマンドライン、終了コード、およびstdout / stderrを抽出する方法

1つのスクリプトからすべてのコマンドライン、終了コード、およびstdout / stderrを抽出する方法

これが私が達成したいものです:

ユーザーがBashで実行するすべてのコマンドに対して、以下をファイルに保存するスクリプトを作成しようとしています。

  1. ユーザーが入力した完全なコマンド
  2. コマンドの終了コード(AFAIKscriptこのコードは提供されていません)
  3. コマンドによって生成されたstdoutとstderrの内容。

次のコマンドを使用して、1と2を非常に迅速に達成できました。https://github.com/rcaloras/bash-preexec

3時に閉まった。

~/.bash_profile私は設定を簡単にするためにドロップできるスクリプトを作成したいと思いました。

よろしくお願いします!

答え1

説明どおりここ標準出力と標準エラーをファイルにキャプチャするために使用してexecリダイレクト&>できます。tee

私が疑問に思うことの1つは、コマンドごとに別のキャプチャを望むか(script「コマンド固有」要件と利用できないアサーションで理解できます)、またはセッション全体を1つのログファイルにキャプチャしたい場合です。

後者の場合は、scriptセッションの開始時に実行し、その中で実行するすべてのタスクを実装することは問題ありませんが、上記の回答も役に立ちます。各コマンドごとに異なるファイルが必要な場合は、コマンドプロンプトでトリガーされるものを実装したい場合があります。実装$PROMPT_COMMANDman bash詳細はこれについて詳しく説明)し、各コマンドのログファイルを置き換えます。

標準ストリームをファイルとしてキャプチャすると、デフォルトでexec &>TTYアプリケーション(画面上に描画)の実行が無効になります(またはlessmc。これは、完全なTTYエミュレーションを実行しない限り、すべてのシェルレベルコンソールキャプチャツールに適用されますscript

関連情報