콘솔에 모든 명령을 입력하기 전에 “ clear ”를 실행하도록 bash를 구성 할 수 있습니까?

터미널에 명령을 입력 할 때마다 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-lCtrl+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는 선택 사항이지만 재설정 프로세스 속도를 높입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다