화면 상단 라인에 bash 입력 유지


12

bash명령 프롬프트 입력을 화면 상단에 유지하여 이전 명령의 출력이 위쪽이 아닌 아래쪽으로 푸시되도록 하고 싶습니다 .

어떻게하면 되나요?


6
따라서 cat파일 이라면 순서가 반대로됩니까?
혼돈

아뇨,하지만 결과물을 아래쪽으로
Tom Price

1
bashbash화면 위치조차 알지 못 하기 때문에이 작업을 수행 할 수 없습니다 : 출력 파일에 쓰기 만합니다. bash커서 재설정시기와 창 스크롤시기를 알기 위해 대화식 프롬프트에 대해 알고있는 터미널 에뮬레이터가 필요합니다 .
chepner

@ chepner에게 감사드립니다.이 문제를 재검토하고 귀하의 의견으로 인해 bash 외부를 보았고 전체 디스플레이 스택을 살펴보기 시작했습니다. 텍스트 기반 가상 콘솔 (X Windows 없음)에 남아 있기 때문에 현재 터미널 에뮬레이터를 피하고 싶지만 GUI 세션의 경우 확실히 살펴 보겠습니다. 누군가 가이 질문에 직면하는
Tom Price

답변:


7

이 줄을 다음에 추가하십시오 .bashrc.

prompt_on_top() {
  tput cup 0 0
  tput el
  tput el1
}

pre_cmd() {
  if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
    return
  fi
  printf "\33[2J"
}

PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG

bashPROMPT_COMMAND있으며 , 명령을 보유하면 bashshow prompt 전에 실행 됩니다. 여기에서 우리는 기능으로 설정 prompt_on_top사용, tput을 화면 상단에 커서를 설정합니다.

bashtrap 을 사용하여 signal을 처리 하여 명령을 실행하기 전에 명령을 실행하는 방법도 있습니다 DEBUG. 여기서는 기능으로 설정하여 pre_cmd이전 화면을 지우고 완료 ( COMP_LINE 이 비어 있지 않음) 또는에서 명령을 실행 하면 아무것도하지 않습니다 BASH_PROMPT.


이 방법에는 제한이 있습니다. 명령 출력이 너무 길어서 화면에 맞지 않으면 출력이 prompt_on_top동작에 의해 무시됩니다 . 이 경우 전체 출력을 읽으려면 출력을 페이저로 파이프해야합니다.


1
잘 설명 된 답변에 감사드립니다. 자세히 읽고 배울 내용이 많이 있습니다. 스크립트를 테스트했으며 현재 명령 사이의 화면에서 이전 출력을 효과적으로 지 웁니다. 이전 출력을 화면 아래의 프롬프트 아래에 유지하고 프롬프트와 이전 출력 사이에 새 출력을 삽입하여 이전 출력을 화면 아래로 밀어 내고 싶습니다.
Tom Price

웹 검색을 통해 여기에 오는 사람들을 위해이 코드 github.com/swirepe/alwaysontop 은 "화면 상단에 bash 프롬프트를 유지합니다"와 몇 가지 다른 기능을 제공합니다. 원래 질문에 대답하지는 않습니다. 이전 명령 출력은 cuonglm의 코드와 같이 삭제됩니다.
WillC

이 솔루션의 다른 단점은 마지막으로 실행 된 명령에 대한 피드백이 없다는 것입니다. 즉, 내용 cat file이 표시 file되지만 정확한 명령 실행에 대한 즉각적인 피드백은 얻지 못합니다. 이상적으로는 프롬프트에 확장되지 않은 + 확장 된 버전의 실행 된 명령과 std 출력이 표시됩니다.
psychoslave
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.