これが私が達成したいものです:
ユーザーがBashで実行するすべてのコマンドに対して、以下をファイルに保存するスクリプトを作成しようとしています。
- ユーザーが入力した完全なコマンド
- コマンドの終了コード(AFAIK
script
このコードは提供されていません) - コマンドによって生成されたstdoutとstderrの内容。
次のコマンドを使用して、1と2を非常に迅速に達成できました。https://github.com/rcaloras/bash-preexec
3時に閉まった。
~/.bash_profile
私は設定を簡単にするためにドロップできるスクリプトを作成したいと思いました。
よろしくお願いします!
答え1
説明どおりここ標準出力と標準エラーをファイルにキャプチャするために使用してexec
リダイレクト&>
できます。tee
私が疑問に思うことの1つは、コマンドごとに別のキャプチャを望むか(script
「コマンド固有」要件と利用できないアサーションで理解できます)、またはセッション全体を1つのログファイルにキャプチャしたい場合です。
後者の場合は、script
セッションの開始時に実行し、その中で実行するすべてのタスクを実装することは問題ありませんが、上記の回答も役に立ちます。各コマンドごとに異なるファイルが必要な場合は、コマンドプロンプトでトリガーされるものを実装したい場合があります。実装$PROMPT_COMMAND
(man bash
詳細はこれについて詳しく説明)し、各コマンドのログファイルを置き換えます。
標準ストリームをファイルとしてキャプチャすると、デフォルトでexec &>
TTYアプリケーション(画面上に描画)の実行が無効になります(またはless
)mc
。これは、完全なTTYエミュレーションを実行しない限り、すべてのシェルレベルコンソールキャプチャツールに適用されますscript
。