bash
有一个方便的文件.bash_history
,其中保存命令的历史记录,并在下次执行时bash
使用保存的命令填充历史记录。
是否可以bc
以相同的方式将命令历史记录保存到文件中,然后在启动时加载它,以便保留 bc 历史记录?
我尝试阅读GNU BC 手册它提到了readline
和libedit
。从ldd /usr/bin/bc
我看到我的用途readline
和readline
拥有write_history
和read_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
$