私のシェルがターミナルで実行されているかどうかをどうやって確認できますか?

私のシェルがターミナルで実行されているかどうかをどうやって確認できますか?

私のシェルが端末に「接続」されているときにのみ実行したいと思います。つまり、私のstdinが端末の入力から出て、stdout(そしてstderr?おそらく重要ではないかもしれません)が印刷/反転されたときにのみ実行したいのです。端末の特定の作業。

GNU / Linuxの詳細(たとえば)に直接依存せずにこれを行うにはどうすればよいですか/proc/self

ベストアンサー1

isattyこれを確認する機能です、しかも-ttestコマンドシンボルシェルスクリプトからアクセスできます。

-ティー ファイル記述子

ファイル記述子番号が真の場合ファイル記述子端末が開いて接続されました。偽ならファイル記述子有効なファイル記述子番号ではないか、ファイル記述子番号ファイル記述子開いていないか開いていますが、端末に接続されていません。

以下を使用して、FD 0(標準入力)がTTYであることを確認できます。

test -t 0

FD 1 と 2 に対して同じ操作を実行して、出力ストリームとエラーストリーム、またはその両方を確認できます。

test -t 0 -a -t 1 -a -t 2

このコマンドは、記述子が端末に接続されている場合は0(成功)を返し、そうでない場合はfalseを返します。

test[「ブラケットテスト」としても使用できるコマンド:

 if [ -t 0 ] ; then ...

この条件を作成する慣用的な方法です。

おすすめ記事