답변:
기본적으로 다음이 필요합니다.
trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG
당신의 .bashrc
또는 유사한 끝에 . 이 문제를 해결하는 데 시간이 걸렸습니다. 자세한 내용은 여기 를 참조하십시오 :)
trap
명령 을 별도 의 명령 으로 실행하여 PS1에 지정하지 말 것을 권장합니다 .
몇 가지 bash 트릭을 결합 할 수 있습니다.
$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 트랩을 전파하게합니다. 그렇지 않으면 제목 표시 줄이 변경되지 않습니다
ssh
/dev/tty
stderr 대신에 리디렉션하는 것이 낫지 않습니까?
나는 다양한 게시물에서 내 자신의 솔루션을 해결했습니다. 이것은 사용자, 호스트 이름, pwd, 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\]"
history 1 과 trap을 사용하여 현재 명령을 추가합니다 .
# 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
필요에 따라 자유롭게 채택하십시오.
.bashrc
내 쉘의 각 명령 뒤에 추가 하면이 출력이 나타납니다0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}
. trap 명령을PS1
? 로 할당하여이 출력을 억제 할 수 있다고 가정합니다 . 그러나PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
작동하지 않습니다. 오류가 발생bash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
합니다.