端末で実行する前のコマンドの端末出力(stderrとstdout)

端末で実行する前のコマンドの端末出力(stderrとstdout)

端末の標準出力と標準エラー(可能であればユーザーが提供した標準入力)を各コマンドのファイルに保存しようとしています。

そのため、次のように編集可能な方法で各コマンドを実行するトラップ関数を作成することから始めました。

shopt -s extdebug

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND

    eval `history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"` |& tee ~/recent_output.txt
    return 1 # This prevent executing of original command
}
trap 'preexec_invoke_exec' DEBUG


そして上記のファイルを保存して実行してみてください。

source file.sh

これは私が望むことを行いますが、次のいくつかのコマンドは実行されません。

cd ..

その理由は、パイプがサブシェルを作成してからその中の各コマンドを実行するためです。したがって、メインシェルは影響を受けません。

Bashのスクリプト機能も次のとおりです。

script ~/recent_output.txt

exit動作しますが、端末で実行している場合にのみ出力が提供されます。

そのため、基本的にbash端末で実行された前のコマンドの出力を保存/インポートしたいと思います。どの言語(golang、Python...)でも助けることができます。

関連情報