仮想端末で実行されているかどうかを検出しますか?


12

私はしたい自動ログインtty1ログインにしてから使用しvlock、それをロックします。

現在の端末は、コンソール、仮想端末(例えばある場合にはどうすればバッシュから検出することができますtty1)私は置くことができるように、vlockにラインを.bash_profile、それが経由でログインする場合にのみ実行していますかtty1


1
tty現在のシェルが擬似端末デバイスに接続されているかどうかを検出することを意味すると誤解される可能性があるため、タイトルを「仮想端末で実行中かどうかを検出」に変更する必要があると思います。
ジョセフR.

@JosephR。それを指摘してくれてありがとう、修正
kiri

@JosephR:悪いコール。擬似端末デバイスは 、ttyではなくp tyです。元のタイトルに戻そうとしています。
Incnis Mrsi

回答:


14

を使用ttyして現在の仮想端末の名前を取得し、caseステートメントでテストできます。

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

さらに良いことに、すべてのターミナルログインシェルがttyであると仮定する代わりに。
キリ

1
Xを除外する必要はありません。スクリプトがXのターミナルエミュレーターで実行されている場合、ttyXが実行されている物理ターミナルではなく、ターミナルエミュレーターの擬似ターミナルが表示されます。
ジル 'SO-悪であるのをやめる'

5

通常、STDIN(FD0)を単純にテストするだけで十分です。

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

OK、ので、.bash_profileログインシェルと通常のGUIのログインで呼び出され、端末を持っていないので、端末のみログインシェルはttyのでなければなりません。良い発見
キリ

1
このスニペットが、ファイルからリダイレクトされたstdinを持つより大きなスクリプトに含まれている場合、VTから実行してもTTYが利用できないと報告されます。
ジョセフR.

1
@JosephR正しい。多くの場合、この値はwith cronまたはatjobsであり、スクリプトがインタラクティブな入力を前提とする場合のエラーを回避します。
JRFerguson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.