bash スクリプトがリモート ターミナル セッションではなく「コンソール」で実行されているかどうかをどのように判断しますか? スクリプトが /dev/console で実行されているかどうか判断する方法があると思います。それとも、間違った (バイナリ) ツリーを調べているのでしょうか?
答え1
これは可能性のようですXY問題。
古い Unix コマンドを使用すると、tty
端末がどのデバイスに接続されているかがわかります。次のようなコマンドで、必要な処理を実行できる可能性があります。
if [ $(tty) = "/dev/console" ]; then
echo "Yes, I am on the console."
else
echo "No, I am not on the console."
fi
しかし、Linux 仮想コンソールのログイン セッションで実行されているプログラムでは、代わりに/dev/tty1
または同様のものが表示される場合があります。シリアル コンソールが使用されている場合は、/dev/ttyS0
またはその他のシリアル ポート デバイスが表示される場合があります。リテラルが表示されるのは、緊急シェル/シングル ユーザー モードで実行している場合のみです。どのデバイスが有効なコンソールであるかを知ることは簡単ではありません。これがが存在し、システム管理者が構成できる/dev/console
理由の 1 つです。/etc/securetty
(シリアルポートを拒否することを選択した場合、どこかのシステム管理者がシリアルオーバーLAN接続を使用して問題を解決しようとしています。とてもリモート システムはあなたを嫌うかもしれません。
プロセスまたはスクリプトがsystemd
サービスとして実行される場合、従来の意味での TTY がまったく存在しない可能性があります。代わりに、その標準出力と標準エラーはsystemd
のジャーナリング機能に接続され、サービスがどのように構成されているかに応じて、起動時にコンソールに渡される場合と渡されない場合があります。
質問を編集して詳細を指定してくださいなぜコンソールを使用しているかどうかを知りたい場合は、実際のニーズに適した方法で質問に対する回答を得る方法を見つけられるようにします。
答え2
を実行する場合はps axu
、プロセスが使用するルート「コンソール」の TTY 列を確認します。
すべてのプロセスにはルートinitプロセスまで動作する親プロセスがある
答え3
を使用して、 2 つの環境でdiff
の結果を調べます。は確認すべきものの 1 つです。env | sort
$DISPLAY
また、 も読んでくださいman isatty
。