bash_historyは評価されたコマンド出力を保存できますか?

bash_historyは評価されたコマンド出力を保存できますか?

Bashまたは他のシェルの履歴が引数のときに評価されたコマンドの出力を保存する方法はありますか?

$ echo $(pwd) && history
 /root
 0  I want something like:
 1  echo $(pwd) && history
 2  echo /root && history

VS

$ echo $(pwd) && history
 /root
 0  echo $(pwd) && history

答え1

これはZSHで可能ですが、問題があるため(以下を参照)、使用しないでください。

zshaddhistory() {
    local cmd newcmd
    cmd=${1%%$'\n'}
    newcmd=${(e)cmd}
    if [[ $newcmd != $cmd ]]; then
        print -sr -- $cmd
        print -sr -- $newcmd
        return 1
    else
        return 0
    fi
}

デフォルトでは、潜在的な履歴の追加から暗黙の改行を削除し、コマンドをe新しい文字列に展開します。これにより、何かが発生した場合は、元のコマンドと新しいコマンドにカスタム履歴を追加します。それ以外の場合は、通常の記録メカニズムがコマンドを return 0履歴に追加します。

しかし! CまたはLISPマクロコードを2回実行する問題と同様の拡張機能に副作用がある場合、$(...)このソリューションは問題になります。したがって、単純なカウンタが間違っているなどのデバッグの問題が好きでない限り、本番用途にはお勧めできません。

% i=0
% print $((i++))
1
% print $((i++))
3
% print $((i++))
5
% print $((i++))
7

または、出力ファイルに複数回書き込みます。

関連情報