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
ロギング機能に挿入されます。サービスの構成方法に応じてコンソール。
質問を編集して指定します。なぜあなたが「コンソール」にいるかどうかを知りたい場合は、私たちがあなたの実際のニーズに合った質問に答える方法を見つけようとします。