端末固有の別名を持つ方法はありますか?
例:「vim」と「nvim」を使用してTerminal.appのバニラvimを参照したいのですが、「vim」と「nvim」を使用してIterm2のNeoVimを参照したいと思います。
答え1
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など)では、この操作が失敗する可能性があります。この場合、より多くのロジックにコードを調整する必要があります。
別の方法
別のアプローチは、1つまたは2つのターミナルプログラムの実行プログラムを変更していくつかの(希望的に)カスタム環境変数を設定し、実際のシェルを実行する小さなラッパースクリプトを実行することです。
#!/bin/sh
THIS_IS_TERMINAL_DOT_APP=1 ; export THIS_IS_TERMINAL_DOT_APP
exec /bin/zsh
...しかし、他の場所から環境変数を継承することも可能です。
もっと研究が必要です
$PPID
プロセスツリーを(最初から)ナビゲートして親プロセスを見つけることができます。ただし、これは実行中の特定のtmux
端末アプリケーション(存在する場合)を確認するために追加のコードが必要であることを検出できます。tmux