쉘 스크립트 내에서 터미널 에뮬레이터 이름 가져오기

쉘 스크립트 내에서 터미널 에뮬레이터 이름 가져오기

pstree쉘 스크립트를 실행하는 상위 에뮬레이터의 이름을 찾기 위해 다음과 같은 것을 사용한 적이 있습니다 .

pstree -s $PPID | awk -F '---' '{print $6}'

이것은 현재 시스템에서 작동합니다. mate-terminal테스트 했지만 xterm이것이 다른 Linux 시스템/플랫폼 및 기타 터미널에서 작동하는지 확실하지 않습니다. 이를 달성하기 위한 더 나은/더 깔끔한(보다 이식 가능한 방법) 방법이 있습니까?

답변1

ps -o comm= -p "$(($(ps -o ppid= -p "$(($(ps -o sid= -p "$$")))")))"

좋은 결과를 가져올 수 있습니다. 세션 리더의 상위 프로세스 이름을 제공합니다. 터미널 에뮬레이터에서 시작된 프로세스의 경우 이는 일반적으로 해당 터미널 에뮬레이터를 실행하는 프로세스입니다( screen, expect, ...와 같은 것을 사용하지 않는 한(단,tmuxscreentmux setsid터미널 에뮬레이터) 또는 start-stop-daemon명시적으로 ...)를 사용하여 새 세션을 시작합니다.

또는 변수를 사용하여 별도의 단계로 구분합니다(이는 스크립트를 더 쉽게 설명할 수 있도록 도와줍니다).

sid=$(ps -o sid= -p "$$")
sid_as_integer=$((sid)) # strips blanks if any
session_leader_parent=$(ps -o ppid= -p "$sid_as_integer")
session_leader_parent_as_integer=$((session_leader_parent))
emulator=$(ps -o comm= -p "$session_leader_parent_as_integer")

여기서 숫자 주위의 공백 제거는 $((...))산술 확장을 사용하여 수행됩니다. 또한 Split+glob 연산자(수정 사항이 없다고 가정 $IFS)를 사용하거나 주석에서 제안된 @ack를 사용할 수도 있습니다 xargs.

ps -o sid= -p "$$" |
  xargs ps -o ppid= -p |
  xargs ps -o comm= -p

또한 wtmp일반적으로 터미널 에뮬레이터에 의해 기록된 항목과 의사 터미널 장치를 사용하는 관련 PID를 구문 분석해 볼 수도 있습니다. 예상/화면/tmux...가 관련되지 않은 경우 데비안 시스템에서 작동합니다.

ps -o comm= -p "$(
  dump-utmp -r /var/log/wtmp |
  awk -v tty="$(ps -o tty= -p "$$")" -F ' *\\| *' '
    $2 == tty {print $5;exit}')"

( dump-utmpGNU 에서 acct).

답변2

현재 셸에서 사용되는 터미널 에뮬레이터의 이름을 찾으려면 X Window System에 현재 셸에 표시되는 창 이름을 문의하세요.

$ xwininfo -id $WINDOWID | awk '/^xwin/ { print $NF }'

Rxvt-unicode에서 실행하면 "xterm"XTerm에 문자열이 반환됩니다 . "urxvt"창 제목을 변경하는 습관이 있는 경우 결과가 다를 수 있습니다. 여기서 반환되는 내용이 바로 이것이라고 가정합니다.

답변3

확립된스티븐 차제라스tmux에서 작동하도록 하는 솔루션(즉, tmux 클라이언트가 표시에 사용하는 터미널 에뮬레이터를 반환)은 다음과 같이 작동하는 것 같습니다.

TERMINAL_EMULATOR="$(ps --pid $(ps --pid $$ -o ppid=) -o comm=)"
if [[ "${TERMINAL_EMULATOR}" =~ tmux ]]; then
    export TERMINAL_EMULATOR=$(ps --pid "$(($(ps --pid $(ps --pid $(tmux display-message -p "#{client_pid}") -o sid=) -o ppid=)))" -o comm=)
else
    export TERMINAL_EMULATOR
fi

관련 정보