bashスクリプトを実行するときにこれが可能であることを確認したいと思いますscreen
。
.bashrc
セッションが画面内で開始されるかどうかに応じて、コマンドプロンプトの色を設定できるようにしたいです。
回答を受けた後、次のリンクが見つかりました。私が画面にあるかどうかはどうすればわかりますか?
答え1
通常$STY
設定されます。
だから:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
通常会話を共有するために必要なものscreen
。制御に使用されるUnixドメインソケットへのパスを設定するために使用されますscreen
(/var/run/screen/S-$USER/$STY
。
ssh
たとえば、この画面で別のコンピュータに接続しても機能しません。ここで実行されているシェルは$STY
その環境には1つもなく、コンピュータのUnixドメインソケットにアクセスできないため、とにかく役に立ちません。
ただし、端末はエスケープシーケンスを使用してそのタイプを決定するように照会できます。
if [ -t 1 ] && [ -t 0 ]; then
s=$(stty -g)
stty -icanon -echo min 0 time 3
printf '\033[>c'
type=$(dd count=1 2> /dev/null)
stty "$s"
case $type in
(*'>83;'*) echo "this is screen"
esac
fi
@val0x00ffが提案した別のアプローチは、環境変数の値を確認することです$TERM
。この値は、アプリケーションがどのタイプの端末と通信しているかを知らせるためのものです。 (さまざまなターミナルバリエーションが実装される可能性があります)screen
で始まるものに設定されています。通り過ぎる、、、。上記のように動作することを保証することはできませんが、より簡単で邪魔になりません。screen
screen
$TERM
rlogin
rsh
telnet
ssh
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
以前の解決策と同様に、実行している可能性がありますが、screen
コマンドを実行できない可能性がありますscreen -X
。ただし、エスケープシーケンスを使用してコマンドを渡すことができます(セキュリティ上の理由からデフォルトでは有効になっていませんが)。
答え2
画面で実行すると、$TERM
環境変数が画面に変わります。次のスクリプトを確認できます。
if [[ "$TERM" == screen* ]]; then
echo "Running in screen"
else
echo "Outside screen"
fi
方法の一つです。echo $TERM
画面の外側とecho $TERM
画面の違いをもう一度見てください。
答え3
私は直接tmuxを使用しており、セッションはまだtmuxセッションにない場合にのみリストされます。
if [ -z "$TMUX" ]; then
alias tmuxa='tmux attach -d -t'
alias tmuxc='tmux new-session -s'
echo "You're not in a tmux session, create a new one with tmuxc, or attach to one of the ones below with tmuxa"
tmux ls
fi