是否可以保存“bc”命令行历史记录?

是否可以保存“bc”命令行历史记录?

bash有一个方便的文件.bash_history,其中保存命令的历史记录,并在下次执行时bash使用保存的命令填充历史记录。

是否可以bc以相同的方式将命令历史记录保存到文件中,然后在启动时加载它,以便保留 bc 历史记录?

我尝试阅读GNU BC 手册它提到了readlinelibedit。从ldd /usr/bin/bc我看到我的用途readlinereadline拥有write_historyread_history功能。此功能是否已实现bc或需要修补吗bc

答案1

如果您对程序内置的命令行编辑功能不满意,您可以通过回卷。这是一个命令行处理器的包装器(aREPL),让您可以在发送之前编辑每一行。 Rlwrap 使用 readline 库并为每个命令单独保存历史记录。

运行rlwrap bc不会为您做任何事情,因为 rlwrap 检测到您bc想要执行自己的命令行编辑,因此 rlwrap 会自行关闭。由于您确实需要 rlwrap 的命令行编辑功能而不是底层命令的功能,请运行

rlwrap -a bc

命令历史记录将保存在~/.bc_history.

依赖 rlwrap 而不是使用程序自己的 readline 集成的主要缺点是 rlwrap 无法执行任何上下文相关的完成操作。例如,python顶层完成了已知的变量和字段,但rlwrap python不能这样做。由于 bc 似乎没有任何自定义完成功能,因此rlwrap -a bc不会失去 bc 的功能。

答案2

这个方法tee对我有用。它保存了整个对话。

$ rm -i bc.log; tee -a bc.log | bc | tee -a bc.log
rm: remove regular file 'bc.log'? y
3*4
12
9*16
144
^C
$ cat bc.log    
3*4
12
9*16
144
$ 

您还可以为 .log 文件的输入和输出设置单独的日志文件bc

下一个示例显示如何仅保存输入并在会话之间附加。

$ rm bc.log  # only when you want to clear the log file

$ tee -a bc.log | bc
7+5-2
10
37*27
999
225/3
75
^C
$ cat bc.log
7+5-2
37*27
225/3
$ tee -a bc.log | bc
2^10
1024
^C
$ cat bc.log
7+5-2
37*27
225/3
2^10
$ 

相关内容