푸시 다운 터미널 출력


16

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

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


이것은 혼란 스러울 것이지만, 나는 당신의 노력에 박수를 보냅니다. 리눅스 / 유닉스 / 오픈 소스의 주요 단점은 하나의 크기가 모든 것에 맞지 않는다는 것입니다.
Bruce Ediger

쉘의 소스 코드를 변경하지 않으면 이것이 불가능하다고 생각합니다 (예 :) bash.
Renan

5
쉘보다 더 많은 것을 해킹해야합니다. 터미널은 전자 기계식이기 때문에 이런 방식으로 스크롤되었습니다. 최소한 터미널 에뮬레이터, 아마도 쉘을 해킹해야한다고 말하고 싶습니다.
Alexios

이것은 실제로 반 직관적입니다. ENTER 키 화살표를 보셨습니까? 위가 아닌 아래 줄을 가리 킵니다.
dresende

터미널에서 출력 된 항목을 가져 오는 방법이 있습니까? 제 생각은 이러한 출력 항목을 각각 잡고 잡을 수있는 래퍼를 만드는 것입니다. 래퍼 UI 상단에 입력 프롬프트를 고수합니다.
rudolph9

답변:


6

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 에서 얻었습니다 .


6

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

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

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

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

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

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

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



6

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

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

1
이것은 약간 버그가 있습니다 (예 : 탭 자동 완성 및 기록).이 UI가 올바르게 구현되면 어떤 느낌이 드는지에 대한 훌륭한 데모입니다. 사람들이 원하는지 알 수 있도록 도와주는 것이 중요하다고 생각합니다!
scipilot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.