当它是一个参数时,bash 或其他 shell 的历史记录是否可以保存评估命令的输出?
$ 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
当它是一个参数时,bash 或其他 shell 的历史记录是否可以保存评估命令的输出?
$ 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
这在 ZSH 中是可能的,但有问题(见下文),因此不应使用:
基本上,我们从潜在的历史添加中删除隐式换行符,然后
e
将命令扩展为新字符串。如果这导致某些事情发生,则会为原始命令和新命令执行自定义历史添加;否则,常规历史机制(通过return 0
)将命令添加到历史。然而!如果任何扩展
$(...)
有副作用,则此解决方案是有问题的,类似于 C 或 LISP 宏代码运行两次的问题。所以,我不会真的推荐它用于生产,除非你喜欢调试问题,比如一个简单的计数器出错:或多次写入输出文件等。