パイプ関数からユーザー入力を読み取る

パイプ関数からユーザー入力を読み取る

関数の内部にある対話型プロンプトに対するメッセージとして関数のパイプ内容を使用したいと思います。私が試したことは次のとおりです。

myfunc ()
{
  local input output
  output=$(cat /dev/stdin)
  
  echo "output: '$output'" >&2
  
  exec 3<&0
  read -u 3 -e -i "$1" -p "Your choice? " input
  exec 3>&-
  echo "input: '$input'" >&2
}

最初は変数にパイプされた標準入力を収集することは可能だと思いましたが、うまくreadいかないようです。だから私は別のファイルディスクリプタから読み取ろうとしましたが、それでもやりたいことはうまくいきませんでした。

output=$(cat /dev/stdin)続行する前にすべての標準入力を取得する必要はありませんかread?私の要求は実現可能ですか?それでは、私は何を見逃していますか?

これが私が作りたい結果です:

$ echo "1 or 2?" | myfunc 
output: '1 or 2?'
Your choice? 1 or 2
# Edit between 1 and 2
input: '1'

何が起こるかは次のとおりです。

$ echo "1 or 2?" | myfunc 
output: '1 or 2?'
input: ''

ベストアンサー1

おすすめ記事