从管道函数读取用户输入

从管道函数读取用户输入

我想使用函数的管道内容作为交互式提示的消息,仍然是在函数内部。这是我尝试过的;

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: ''

相关内容