푸시 다운 터미널 출력 순서를 반대로 바꾸는 표준

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

~/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 터미널 프로그램의 출력 부분이 정의 된 곳은?



답변

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 ' ' _;

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

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

tput -S여러 이진 호출을 피하기 위해 사용할 수도 있습니다 .


https://github.com/swirepe/alwaysontop$PROMPT_COMMAND 에서 얻었습니다 .


답변

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

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

더 나쁜 것은, 터미널 에뮬레이터가 얻는 것은 “이 문자를이 위치에 놓는다”유형 명령의 문자열입니다. 명령 프롬프트와 명령 프롬프트에서 실행되는 명령 사이에는 차이가 없으므로 적어도 두 쉘에서 하나의 작업을 수행 할 수 없습니다.

셸과 프로그램은 화면이 위로 올라가고 아래쪽에 새 데이터가 있다고 가정하고 영원히 내려갑니다.

적어도 이론적으로 터미널 에뮬레이터를 수정하여 “맨 아래”줄부터 화면 맨 아래의 “맨 위”줄까지 역순으로 줄을 표시 할 수 있습니다.

그러나 명령 출력에서 ​​줄 순서를 뒤집을 수 있으므로 나머지 내용도 뒤로 튀어 나옵니다. 명령 (예 : ls, cat)이 “down”으로 실행 되길 원하지만 “up”생활로의 이동 프롬프트는 더 어렵습니다.

나는 이것을 구현하는 소프트웨어를 모른다. (…하지만 JdeBD의 의견을 참조하십시오.) 🙂


답변

이것은 출력을 정확하게 반전 시키지는 않지만 프롬프트를 맨 위에 유지합니다.

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


답변