터미널별 별칭

터미널별 별칭

터미널 별 별칭을 갖는 방법이 있습니까?

예: "vim"과 "nvim"을 사용하여 Terminal.app의 바닐라 vim을 참조하고 싶지만 "vim"과 "nvim"을 사용하여 Iterm2의 NeoVim을 참조하고 싶습니다.

답변1

한 가지 방법은 환경을 확인하고 둘을 구별할 수 있는 적절한 변수가 있는지 확인하는 것입니다. 여기서는 터미널 브랜드 X입니다.

% env | grep -i -E 'terminal|iterm'
ITERM_PROFILE=small-white
ITERM_SESSION_ID=w3t0p0:BF718B9E-F185-44FF-9BC4-4F071F378015

그 다음에는 브랜드 Y가 있습니다

% env | grep -i -E 'terminal|iterm'
TERM_PROGRAM=Apple_Terminal

그러나 하나의 환경 변수가 다른 환경 변수 내에 있으면 이는 완전히 신뢰할 수 없습니다. iTerm에서 실행할 경우 Terminal.app이 실행되지 않습니다.

% print $ITERM_SESSION_ID
w3t0p0:BF718B9E-F185-44FF-9BC4-4F071F378015
% open -a Terminal.app

그런 다음 방금 시작된 Terminal.app에서 다음을 볼 수 있습니다.

% env | grep -i -E 'terminal|iterm'
ITERM_SESSION_ID=w3t0p0:BF718B9E-F185-44FF-9BC4-4F071F378015
ITERM_PROFILE=small-white
TERM_PROGRAM=Apple_Terminal

Terminal.app은 iTerm.app 환경 변수를 호출하여 상속받기 때문입니다 open. 절대로 이 작업을 수행하지 않으면 문제가 되지 않을 것입니다.

어쨌든 환경 변수가 정확하다고 생각한다면

if [[ $TERM_PROGRAM == "Apple_Terminal" ]]; then
   print "I'm a terminal!"
else
   print "I'm not a PC"
fi

Apple 터미널이 아닌 것은 모두 iterm이라고 가정하여 둘 사이를 구별해야 합니다. 원격 SSH 연결이나 기타 터미널 프로그램(예: Alacritty)에서는 이 작업이 실패할 수 있으며, 이 경우 더 많은 논리로 코드를 조정해야 합니다.

또 다른 방법

또 다른 접근 방식은 하나 또는 두 터미널 프로그램의 실행 프로그램을 변경하여 일부 (희망적으로) 사용자 정의 환경 변수를 설정한 다음 실제 쉘을 실행하는 작은 래퍼 스크립트를 실행하는 것입니다.

#!/bin/sh
THIS_IS_TERMINAL_DOT_APP=1 ; export THIS_IS_TERMINAL_DOT_APP
exec /bin/zsh

...하지만 다른 곳에서 환경 변수를 상속받는 것도 가능합니다.

더 많은 연구가 필요합니다

$PPID프로세스 트리를 (처음부터) 탐색하여 상위 프로세스를 찾을 수 있습니다. 그러나 이는 실행 중인 tmux특정 터미널 응용 프로그램(있는 경우)을 확인하기 위해 추가 코드가 필요한 것을 감지할 수 있습니다.tmux

관련 정보