프로세스가 실행되는 동안 터미널 창 제목을 업데이트할 수 있습니까?

프로세스가 실행되는 동안 터미널 창 제목을 업데이트할 수 있습니까?

나는 터미널에서 나 자신을 위한 작은 포모도로/카운트다운 타이머를 설정하려고 합니다.

이 댓글printfSuperuser에서는 STDOUT까지 남은 시간(굉장함)인 카운트다운 타이머 역할을 하는 편리한 작은 쉘 기능을 제공합니다 . 터미널 에뮬레이터 탭의 제목에 실시간 카운트다운이 표시되어 탭을 왔다 갔다 하지 않고도 남은 시간을 확인할 수 있으면 더 좋겠다고 생각했습니다.

나타난다환경 PROMPT_COMMAND변수를 사용하여 창 제목을 업데이트할 수 있습니다., 그러나 그 내용이 실행되기 때문에Bash가 프롬프트를 표시하기 직전에만, 프로세스가 실행되는 동안 제목을 실시간으로 업데이트할 수 있는 방법은 없습니다.

이 작업을 수행할 수 있는 방법이 있나요?

(tmux에서 새 창을 분할하면 이 문제를 더 쉽게 해결할 수 있다는 생각이 들었습니다. 하지만 저는 작은 화면을 사용하고 있으므로 가능한 모든 화면 공간을 절약할 수 있다면 감사하겠습니다.)

답변1

터미널 코드가 필요할 수 있습니다. 참조http://wiki.bash-hackers.org/scripting/terminalcodes그리고https://en.wikipedia.org/wiki/ANSI_escape_code자세한 내용은 (또는http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlxterm과 관련된 코드에 대한 기술적인 설명을 보려면)

제목을 설정하는 방법의 예는 다음과 같습니다.

set_title() {
  printf '\033]0;%s\007' "$*"
}

답변2

관련 ANSI 코드를 stdout 또는 stderr로 출력하면 됩니다.

다음은 나에게 효과적입니다 xterm.

for i in {10..1} ; do printf '\e]0;'$i'\a' ; sleep 1 ; done &

일부 터미널에서는 프로그래밍 방식으로 제목을 변경하는 API를 제공할 수도 있습니다.

관련 정보