나는 수년 동안 그것을 사용해 왔습니다 ksh
. 나는 Esc v명령 기록에서 "vi" 편집기를 호출할 수 있는 가능성을 좋아합니다. 기록의 명령이 여러 줄에 걸쳐 분산되어 있는 경우(예: while 루프로 인해) "vi"는 기록이 여러 줄에 걸쳐 분산되어 있음을 표시합니다. 이 기능을 사용하면 파일에 입력을 쓰지 않고도 복잡한 명령문을 쉽게 작성할 수 있습니다.
나는 몇 년 전에 그렇게 되었다 bash
. 기본 단축키 Ctrl- - 와 X Ctrl동일한 가능성이 있습니다 E. 약간의 차이점은 bash
모든 줄을 세미콜론으로 구분된 하나의 긴 줄로 병합한다는 것입니다. 구문은 여전히 정확하지만 가독성이 떨어집니다.
그래서 제가 하는 일은 명령이 복잡해지면 ksh를 호출하는 것입니다.
bash
기록 줄을 병합하지 않고 그대로 실행하도록 구성하는 방법이 있습니까 ksh
?
어떤 도움이라도 환영합니다.
답변1
사용:
shopt -s lithist
암석의
설정된 경우,CMDHIST옵션이 활성화되면 여러 줄 명령은 가능한 경우 세미콜론 구분 기호를 사용하는 대신 포함된 줄 바꿈을 사용하여 기록에 저장됩니다.
이 기능이 기본적으로 활성화되지 않은 이유는 사람들이 history | grep something
기록 항목 번호 찾기와 같은 명령을 자주 사용하기 때문이라고 생각합니다. 기록 항목이 여러 줄로 나누어진 경우 일치하는 줄에 grep
항목 번호가 항상 포함되지는 않습니다.
답변2
나는 또한 그 점을 지적하고 싶다.배쉬 버전 4타임스탬프 파일에서 기록을 읽을 때 여러 줄 명령은 유지되지 않습니다.
즉, 둘 다 가지고 있다는 의미입니다.
shopt -s cmdhist
shopt -s lithist
빈 문자열을 사용하여 타임스탬프를 저장하면(명령에 타임스탬프 구분 기호가 있음) History 출력에 타임스탬프가 표시되지 않지만 활성화되어 있음을 의미합니다.
HISTTIMEFORMAT=''
쉘 시작 시 또는 "history -r"을 사용하면 bash는 여러 줄 명령의 각 추가 줄을 별도의 기록 항목으로 처리합니다! 즉, 시작 시 여러 줄의 모든 기록이 손실됩니다.
이 문제는 bash 버전 5에서 해결되었지만 "버그"를 수정한 정확한 버전은 확실하지 않습니다.