터미널에 명령을 입력 할 때마다 clear
명령을 실행하도록 bash를 구성하고 싶습니다 (이전 내 명령 실행). 어떻게해야하나요?
저는 Debian Linux를 사용하고 있습니다.
댓글
- 이 스레드가 유용합니다.
- 궁금한 점 : 어떤 '이 작업을 신청하십니까? 내가 ' 출력이 많은 프로그램을 디버깅하는 중입니다. 일반적으로 화면에 최대한 많이 유지하여 컨텍스트를 추적 할 수 있도록합니다. I ' m working in.
Answer
Bash는 사전 명령 후크 . 일종의.
preexec () { clear } preexec_invoke_exec () { [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don"t cause a preexec for $PROMPT_COMMAND local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning preexec "$this_command" } trap "preexec_invoke_exec" DEBUG
댓글
- Gilles : 붙여 넣었습니다. 위의 내용을 konsole 터미널에 입력하고 이후에 입력 한 각 명령의 출력은 읽을 수 있기 전에 지워졌습니다. 뭔가 빠졌나요? 또한 여러 줄의 bash 스크립트를 호출하면 이것 (및 아래의 다른 답변)에 대해 어떻게 되나요? 둘 이상의 라인 (또는 마지막 라인이 아닌 다른 라인)은 인터를 생성합니다. esting output?
- @Joe 명령을 실행하기 전에
Enter
를 누른 후 화면을 지워야합니다. 나를 위해 이렇게 작동합니다. preexec 후크는 각 대화 형 명령에 대해 실행되며, ' 명령이 내장 명령이든 외부 명령이든 또는 여러 명령이든 상관 없습니다. - @ Joe는 다음 줄을 추가해야합니다. 완료되면 아무 작업도하지 않습니다.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
문제는 PROMPT_COMMAND가 실행 중이고 실제 명령 이후에도 트랩된다는 것입니다. 또한 누군가local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
가 여기에있는 이유를 말해 줄 수 있습니까? - @JamesAndino
history -1
는 마지막 명령 줄을 다음과 같이 인쇄합니다. 앞에 역사 번호. sed 필터는 기록 번호를 제거합니다. - @JamesAndino 작동했습니다 (그리고 Giles가 답변에 추가 한 것을 보았습니다.)
Answer
bind "RETURN: "\e[1~clear; \e[4~\n""
그 후에는 iv id = “를 작성하는 대신 return 을 누를 때마다 ad85e79e41 “>
줄의 시작 부분으로 이동하고 clear;
텍스트를 입력 한 다음 끝으로 이동하여 \n
예상대로입니다.
코멘트
- 개행은 프롬프트가 어쨌든 인쇄되도록합니다. 따라서 프롬프트에 명확한 내용을 입력하면 동일한 결과를 얻을 수 있습니다. <
clear
명령으로 명령 기록을 오염시키지 않습니다. - @ jw013 차이점은 제 경우에는
clear
는 명령 및 명령 출력이 사라지지 ' 전에 실행됩니다. 그러나 프롬프트가있는 경우에는 그렇습니다. - 명령 줄 자체를 수정하지 않고도이 작업을 수행 할 수있는 방법이 있었으면합니다. ' 복잡하거나 여러 줄로 된 명령에서 흥미로운 방식으로 중단되지만 '이 작업을 수행하는 더 좋은 방법을 찾을 수 없습니다.
- @ jw013, 맞습니다. 여러 줄에 대해 구분하지 않습니다 .. 각 추가
\n
의 출력에clear;
를 삽입합니다. - 이 팁 아주 좋은 thx입니다 !! 일부 특정 코드를 F2에 바인딩해야했지만 입력 한 명령이 있지만 실행되지 않은 경우도 있으므로이 예를 사용하면 시작 부분으로 이동합니다.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
ls;#
거기에 무엇이 있었는지 주석을 달고ls
명령을 올바르게 실행하십시오! thx!
답변
오늘 제가 질문 한 내용 (사용자 @aecolley”s answer ) :
bind ""\C-m": "\C-l\C-j""
\C-m
시뮬레이션 “Enter”키, \C-l
가 Ctrl+l
를 명확하게 시뮬레이션하고 \C-j
는 “줄 바꿈 및 들여 쓰기”이므로 명령은 Enter 키를 GNU bash, 버전에서 작동하는 Ctrl + l & Ctrl + j
에 바인딩합니다. 3.2.53 (1) -release (x86_64-apple-darwin14) 및이 스레드의 다른 답변은 그렇지 않습니다. 또한 이것은 다른 모든 명령에 “clear”명령으로 기록을 오염시키지 않습니다.
댓글
- 참고 : ssh 이상을 사용하는 경우 해당 환경에서 실행해야합니다. 그렇지 않으면 이상이 발생합니다.
- 좋습니다. 내 우분투 16.04 터미널에서 작동하지만 어떻게 작동합니까? 링크 나 문서를 제공해 주시겠습니까?
답변
원하는 경우에만 삭제 고려
cb4() { preexec () { clear } }
이것은 preexec
라는 후크를 사용하며 zsh에서도 작동 함을 확인했습니다.
그런 다음 모든 명령을 실행하기 전에 자동으로 지우려는 모든 세션 : cb4
모든 상황에서 항상 지우고 싶은 경우
preexec () { clear }
실제로 터미널을 재설정하려는 경우
clear
단어를 tput reset
로 바꿉니다.
tput
는 선택 사항이지만 재설정 프로세스 속도를 높입니다.