"bc" 명령줄 기록을 저장할 수 있나요?

"bc" 명령줄 기록을 저장할 수 있나요?

bash.bash_history명령 내역이 저장되고 bash다음에 명령을 실행할 때 저장된 명령으로 내역이 채워지는 편리한 파일이 있습니다 .

bc동일한 방법으로 명령 기록을 파일에 저장한 다음 시작 시 로드하여 기록이 보존되도록 할 수 있습니까 ?

나는 읽으려고 노력한다GNU BC 매뉴얼readline과 를 언급하고 있습니다 libedit. ldd /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
$ 

관련 정보