入力が端末から来るかどうかを検出

入力が端末から来るかどうかを検出

ファイルまたは標準入力から読み取ることができるシェルスクリプトがあります。現在のファイルまたはパイプテキストを提供しない場合は、コマンドプロンプトで入力を受け入れ始めます。

代わりに、この場合は「ヘルプ」メッセージを印刷したいと思います。これを行う標準的な方法はありますか?それ以外の場合、標準入力に影響を与えずに検出する方法はありますか?それとも、潜在的な入力がどこから来るのかを検出する方法はありますか?

readコマンドが終了ステータスを介して入力があるかどうかを知らせることができることを知っています。しかしそれも行動入力時に後続の読み取りに影響します。

答え1

解決策は、入力がttyデバイスから来ていることを確認することです。まず、argsが提供されていることを確認してから、を確認してくださいtty

if [ ! "$#" -gt 0 ] && tty -s ; then
  show_help
  exit 1
fi

ドキュメントからtty

標準入力に接続されている端末のファイル名を印刷します。

標準入力に接続されている端子がない場合、tty障害終了状態が提供されます。そしてこの-sオプションは出力を抑制します。

関連情報