유용한 정보로 Unix 쉘 프롬프트를 채우는 것이 일반적이지만, 하나의 프롬프트에 모두 담기에는 집중하고 싶은 것들이 너무 많았습니다: 현재 Gnu 화면 창, 현재 디렉토리, 현재 시간, 호스트 이름, 현재 git 브랜치, 달 위상, 원하는대로 말만 해.
하나쯤 있으면 더 현명할 것 같아요고정된 상태영역이 모든 정보를 터미널 하단(또는 상단)에 표시하고 프롬프트는 그대로 둡니다. (저는 한 행으로 제한하고 싶지 않았기 때문에 "고정 상태 행" 대신 "고정 상태 영역"이라고 썼습니다.)
(물론 이 영역은 일반적인 대화형 출력의 영향을 받지 않습니다.)
고정된 상태 영역에 대한 표준 Unix 구현이 있고 precmd
이 기능을 통해 업데이트할 수 있습니까?
답변1
화면을 가로로 분할하여 screen
원하는 크기로 영역을 만들 수 있습니다.상태 영역을 클릭하고 그 안에 뭔가를 실행한 watch -t cat ~/.status
다음 그 내용 ~/.status
을 precmd()
.
답변2
터미널이 터미널 주소 지정, 커서 저장 및 커서 복원을 지원하는 경우 다음이 작동할 수 있습니다.
PS1="$(tput sc;tput cup 0 0;tput rev;tput el)\u@\h \W$( tput rc;tput sgr0)\$ "
그러나 이 명령은 쉘이 입력 버퍼에서의 위치에 대해 혼란스러워지기 때문에 편집하기 어려울 수 있습니다.
에서는 bash
백슬래시 대괄호를 사용하여 커서 제어 순서를 무시하도록 지시할 수 있습니다.
PS1="\[$(tput sc;tput cup 0 0;tput rev;tput el)\]\u@\h \W\[$( tput rc;tput sgr0)\]\$ "
그래도 작동하지 않으면 출력을 터미널로 직접 보내 보십시오.
TOSL=$(tput sc;tput cup 0 0;tput rev;tput el)
FROMSL=$(tput sgr0; tput rc)
PS1='$(echo -n "$TOSL $LOGNAME@$HOSTNAME ${PWD/#$HOME/~}$FROMSL">/dev/tty)\$ '
답변3
귀하의 질문이 있은 지 10년이 지난 올해[2023년] 어느 날 나는 지루해져서 "Basta"(Bash 상태 표시줄)라는 작은 것을 썼습니다.
https://www.kylheku.com/cgit/basta/about/
~/.bashrc
날짜, 시간, 호스트 및 작업 디렉터리(필요한 경우 적절하게 축약할 수 있음)를 표시하는 화면 하단에 보호된 상태 줄을 제공하는 파일에서 얻는 작은 스크립트입니다 .
Bash가 입력을 기다리는 동안 시간이 업데이트됩니다!
답변4
AT&T Unix에는 sysline
하드웨어에 명령이 없는 터미널에 상태 줄을 제공하는 명령이 있습니다. 아마도 지금은 GNU에 상응하는 것이 있을 것입니다...