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
または、出力ファイルに複数回書き込みます。