xterm 제목 표시줄에 명령 표시

xterm 제목 표시줄에 명령 표시

내 Bash 프롬프트는 현재 다음 순서를 사용하여 xterm 제목 표시줄을 설정하고 있습니다.

PS1='\033]0;\u@\h>\w\007'

제목 표시줄에 현재 명령을 표시하는 쉬운 방법이 있습니까? 예를 들어, 후행 파일을 사용하는 경우 tail -f foo.log제목 표시줄에 을 표시하고 싶습니다 tail -f foo.log.

답변1

기본적으로 다음이 필요합니다.

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG

당신의 마지막이나 그와 비슷한 것 .bashrc. 그것을 알아내는 데 시간이 좀 걸렸습니다. 내 대답을 확인하세요여기더 많은 정보를 알고 싶다면 :)

답변2

(에서 영감을 받다이것이 답이다)

몇 가지 bash 트릭을 결합할 수 있습니다:

  • DEBUG 신호가 포착되면 각 명령을 실행하기 전에 핸들러가 호출됩니다.
  • 이 변수는 $BASH_COMMAND현재 실행 중인 명령을 보유합니다.

따라서 DEBUG를 포착하고 핸들러가 헤더를 다음과 같이 설정하도록 합니다 $BASH_COMMAND.

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG

이렇게 하면 다른 것이 변경될 때까지 제목이 계속 변경되지만 $PS1동일하게 유지되는 한 문제가 되지 않습니다. 명령을 시작하면 DEBUG 핸들러가 제목 표시줄을 변경하고 명령이 완료되면 bash는 새 제목을 그립니다. 메시지를 표시하고 다시 시작합니다. 제목 표시줄을 설정합니다.

유용한 팁을 찾았습니다여기(SU 답변의 출처이기도 함)에는 다음이 포함됩니다.

set -o functrace

이렇게 하면 bash가 DEBUG 트랩을 시작하는 모든 하위 쉘에 전파하게 됩니다. 그렇지 않으면 제목 표시줄이 변경되지 않습니다.

답변3

나는 다양한 게시물에서 내 자신의 솔루션을 생각해 냈습니다. 그러면 사용자, 호스트 이름, 비밀번호, tty 및 현재 실행 중인 명령(bash용)이 포함된 헤더가 생성됩니다.

다음과 같습니다(명령이 실행되지 않음).

.:[user@hostname:/home/user][pts/10]:.

다음과 같이(명령 실행):

.:[user@hostname:/home/user][pts/10] {tail -F /var/log/syslog}:.

.bashrc 어딘가에 PS1을 확장했습니다.

# set the terminals title. This is the "post-command" part,
# need to use a trap for pre-command (to add the command line to the title)
PS1+="\[\033]2;.:[\u@\h:\$PWD] [$(tty | cut -b 6-)]:.\007\]"

현재 명령을 추가하려면 다음을 사용하십시오.역사 1그리고:

# set a fancy title (this is pre-command, in PS1 is after-command (to reset command)
trap 'echo -ne "\033]2;.:[${USER}@${HOSTNAME}:${PWD}] [$(tty | cut -b 6-)] {$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//g")}:.\007"' DEBUG

필요에 따라 자유롭게 조정하시기 바랍니다.

관련 정보