コマンドラインから入力を受け取る関数があります。オプションで、標準入力から。ただし、入力ストリームが指定されていない場合は入力を停止します。
#!/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 ]
このリンクには良い例があります。