bashスクリプトがリモート端末セッションではなく「コンソール」で実行されていることをどのように確認できますか?

bashスクリプトがリモート端末セッションではなく「コンソール」で実行されていることをどのように確認できますか?

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は、緊急シェル/シングルユーザーモードで実行するときです。どのデバイスが有効なコンソールであるかを知ることは簡単なことではなく、/etc/securettyシステム管理者が設定できる理由の1つです。

(シリアルポートを拒否することを選択した場合は、どこかにあるシステム管理者がLANのシリアル接続を使用して問題を解決しようとします。非常にリモートシステムがあなたを嫌うかもしれません。 )

プロセスまたはスクリプトがサービスとして実行される場合、systemd伝統的な意味のTTYがまったくない可能性があります。代わりに、標準出力と標準エラーがsystemdロギング機能に挿入されます。サービスの構成方法に応じてコンソール。

質問を編集して指定します。なぜあなたが「コンソール」にいるかどうかを知りたい場合は、私たちがあなたの実際のニーズに合った質問に答える方法を見つけようとします。

答え2

を実行している場合は、ps axuTTY列でプロセスが使用するルート「コンソール」を見つけます。

すべてのプロセスには、ルートinitプロセスまでの親プロセスがあります。

答え3

両方の環境で結果を検索するために使用されますdiff。確認してみる事だ。env | sort$DISPLAY

また読んでくださいman isatty

関連情報