터미널 출력의 출력 순서를 반대로 바꾸는 표준 방법이 있습니까?
~/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