푸시다운 단자 출력

푸시다운 단자 출력

터미널 출력의 출력 순서를 바꾸는 표준 방법이 있습니까? 즉:

~/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

관련 정보