端末の標準出力と標準エラー(可能であればユーザーが提供した標準入力)を各コマンドのファイルに保存しようとしています。
そのため、次のように編集可能な方法で各コマンドを実行するトラップ関数を作成することから始めました。
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...)でも助けることができます。