푸시다운 터미널 출력

푸시다운 터미널 출력

터미널 출력의 출력 순서를 바꾸는 표준 방법이 있습니까? 즉, 다음과 같습니다.

~/Developer $ command0 
-bash: comman0: command not found 
~/Developer $ command2 
-bash: command2: command not found 
~/Developer $ command3 
-bash: command3: command not found 
~/Developer $ 

다음과 같이 표시됩니다.

~/Developer $ 
-bash: command3: command not found 
~/Developer $ command3 
-bash: command2: command not found 
~/Developer $ command2 
-bash: comman0: command not found 
~/Developer $ comman0

나는 항상 하단에 프롬프트를 표시하는 것이 직관적이지 않다고 생각합니다. 출력을 표시하는 더 효과적인 방법은 출력 순서를 바꾸는 것입니다. 이것을 구현하려면 어떻게 해야 합니까? 구체적으로 OSX 터미널 프로그램의 출력 부분이 정의된 위치는 어디입니까?

답변1

Bash에서는 상단에 현재 프롬프트/명령이 표시되고 아래에 출력이 표시되지만 스크롤이나 이전 명령은 표시되지 않습니다.

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

이 함수는 이전 명령을 아래에 배치하지만 각각의 명령을 개별적으로 파이프해야 합니다. 불행히도 exec > >(f)개별 명령이 아닌 전체 bash를 리디렉션하므로 이에 대해 도움을 줄 수 없습니다. 기능은 다음과 같습니다.

f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }

그런 다음 다음과 같은 모든 명령을 실행하십시오.

command args |f

출력을 저장하고 길이+1에 해당하는 빈 줄을 여러 개 생성한 다음 출력을 다시 넣습니다. 원하는 경우 가짜 프롬프트나 수평선을 표시하는 줄을 끝에 태그할 수 있습니다. 예:

printf '%*s' $COLUMNS | tr ' ' _;

이 전체 함수에 대한 자동 대안으로, 이전 $PROMPT_COMMAND 끝에 임의의 11줄을 지우는 명령을 추가할 수 있습니다.

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'

tput -S다중 바이너리 호출을 피하기 위해 사용할 수도 있습니다 .


나는 $PROMPT_COMMAND에서 그것을 얻었다https://github.com/swirepe/alwaysontop.

답변2

불행히도 이것은 상당히 어려울 것입니다. 응용 프로그램과 OS-X 터미널 간의 프로토콜은VT100 / ANSI터미널 제어 프로토콜, 특히X텀규약.

여기에는 디스플레이가 반전된 세계로 다시 매핑하기 어려울 수 있는 화면 위치 등에 대한 많은 가정이 포함됩니다.

더 나쁜 것은 모든 터미널 에뮬레이터가 "이 문자를 이 위치에 배치" 유형 명령 문자열이라는 것입니다. 명령 프롬프트와 그에 의해 실행되는 명령의 출력 사이에는 차이가 없으므로 두 부분 모두에 대해 한 가지 작업을 수행할 수 없습니다. 적어도 아래 셸의 협력 없이는 불가능합니다.

쉘과 프로그램은 화면이 위쪽으로 진행된다고 가정합니다. 즉, 아래쪽에 새로운 데이터가 있고 아래쪽으로 영원히 계속됩니다.

최소한 이론적으로는 터미널 에뮬레이터를 수정하여 줄을 역순으로 표시할 수 있습니다. 즉, "맨 아래" 줄부터 화면 맨 아래 줄까지 표시됩니다.

하지만 이렇게 하면 명령 출력의 줄 순서가 바뀌므로 나머지 내용도 뒤로 튀어나오게 됩니다. 명령(예: ls, cat)을 "아래로" 실행하고 싶지만 "위로" 이동하라는 메시지가 표시되는 경우 생활이 더 어렵습니다.

나는 이것을 구현하는 소프트웨어를 모른다. (...하지만 이에 대한 링크는 JdeBD의 설명을 참조하세요.) :)

답변3

출력이 정확히 반전되지는 않지만 프롬프트가 맨 위에 유지됩니다.

https://github.com/swirepe/alwaysontop

사용하려면 다음을 실행하세요.

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

마음에 든다면 다음과 같이 .bash_profile에 소스를 입력하세요.

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile

관련 정보