標準入力から入力がないときに入力を停止する「読み取り」コマンドを避けてください。

標準入力から入力がないときに入力を停止する「読み取り」コマンドを避けてください。

コマンドラインから入力を受け取る関数があります。オプションで、標準入力から。ただし、入力ストリームが指定されていない場合は入力を停止します。

#!/bin/bash
somefunc() {
  # output strings on command line.
  while (($#)); do
    echo "$1"
    shift
  done

  # take input from stdin, if it exists.
  declare line
  while read -sr line; do 
    echo "$line"
  done
}

somefunc "$@"

これは働きます:

$ somefunc "arg1" "arg2" "..." <"/some/file"

以下は行われません。

$ somefunc "arg1" "arg2" "..." 

読み取りコマンドにタイムアウト(例:-t 0.0001)を使用してこの問題を解決できますが、これは少しぎこちなく脆弱です。

タイムアウトを使用せずにこれを達成するより良い方法はありますか?

ベストアンサー1

-t を使用した bash 組み込みテストでは、作業をうまく実行する必要があります。 [ -t 0 ] このリンクには良い例があります。

入力がパラメータ、ファイル、または端末から来ているかどうかを検出する方法

おすすめ記事