我想使用函数的管道内容作为交互式提示的消息,仍然是在函数内部。这是我尝试过的;
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: ''