"bc"コマンドライン履歴を保存できますか?

"bc"コマンドライン履歴を保存できますか?

bash.bash_historyコマンド履歴が保存され、bash次にコマンドを実行するときに保存されたコマンドで履歴がいっぱいになる便利なファイルがあります。

bc同じ方法でコマンド履歴をファイルに保存し、起動時にロードして履歴を保存することはできますか?

読もうとするGNU BCマニュアルreadlineと言及していますlibeditldd /usr/bin/bc私の用途readlinereadline所有物を見るとwrite_historyそしてread_history機能。この機能はすでに実装されていますかbc?それともパッチが必要ですかbc

答え1

プログラムに組み込まれているコマンドライン編集機能が満足できない場合は、次のものを使用できます。巻き戻す。これはコマンドラインプロセッサです(aREPL)、送信する前に各行を編集できます。 Rlwrap は readline ライブラリを使用し、各コマンドごとに別々の履歴を保存します。

rlwrapは、ユーザーが直接コマンドライン編集を実行したいことを検出し、rlwrapが自動的に閉じるため、実行してもrlwrap bc何もしません。bc基本コマンドの機能ではなく、rlwrapのコマンドライン編集機能が実際に必要なので、以下を実行してください。

rlwrap -a bc

コマンド履歴はに保存されます~/.bc_history

プログラム自体のreadline統合を使用するのではなく、rlwrapに依存する主な欠点は、rlwrapが状況に応じた完了操作を実行できないことです。たとえば、python最上位レベルでは既知の変数とフィールドが完成しますが、rlwrap pythonそうすることはできません。 bcにはカスタム補完機能がないようで、rlwrap -a bcbcの機能は失われません。

答え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
$ 

関連情報