在bash中调用函数时是否可以提示用户输入?
以此为例:
#!/bin/bash
test1(){
echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
case $yn in
Yes ) make install; break;;
No ) exit;;
esac
done
}
pip list 2>/dev/null | if grep httplib2; then echo 2>/dev/null; else test1; fi
忽略我正在检查httplib2的事实,因为我知道如果你回应“测试”,它可以正常工作。我用stackoverflow和tldp的例子试过这个,所以我现在有点困惑。
您是否可以从管道if语句中捕获用户输入?
刚刚用
测试pip list 2>/dev/null | if grep httplib2; then
echo 2>/dev/null;
else
echo "Type the year that you want to check (4 digits), followed by [ENTER]:"
read year
echo $year
fi
也有同样的效果。
答案 0 :(得分:1)
如果test1
在管道中,但您需要终端输入,请使用:
test1 </dev/tty
例如:
pip list 2>/dev/null | if grep httplib2; then echo 2>/dev/null; else test1 </dev/tty; fi
test1
从stdin获取输入。如果你想与它进行交互,它的标准输入必须来自终端/dev/tty
,而不是来自管道。
另一种方法是在管道启动之前捕获stdin的句柄。例如:
exec 3<&0; echo http | test1 <&3; exec 3<&-
或者,
exec 3<&0
pip list 2>/dev/null | if grep httplib2; then echo 2>/dev/null; else test1 <&3; fi
exec 3<&-