我有一个shell脚本提示回答是/否。在提供输入前的提示下,我使用了control-c信号,该信号调用了信号处理功能。在信号处理功能中,有一个提示“ q”退出或“ y”和“ y”应与FIRST read提示一起使用。
我尝试(( echo "y" | read ))
,但没有成功
==========================================
This is part of my script:
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
echo "y" | read ----->here I need "y" to be an input to read prompt
directly and being saved in "ans" variable in
main body where I used control-c
fi
}
trap 'IntHandle' SIGINT
read -p "no valid user id entered, new user ids? [y\n]: " ans ----> here
used control-c signal before give y/n to ans
if [[ $ans == "y" ]]
then
read -p " username :" name
fi
.
.
.
.
.
================
输出应如下所示:
没有输入有效的用户ID,是否有新的用户ID? [y \ n]:输入了#control-c
'使用'q'退出'y ------>在Siganl Handeling中,“ y”输入的是“ q” 函数,然后将其保存在“ ans”变量中 提示用户名的条件为真。
用户名:Larry ----->在真实条件后输入的名称。 。 。
答案 0 :(得分:1)
代替
echo "y" | read
尝试:
ans=y
需要在触发陷阱之前对陷阱函数进行定义。所以我将其移至文件顶部。
函数完成后,控制权返回到被Ctrl-C中断的read
语句。因此,我将取代原来的提示而不是echo "y" | read
或ans=y
:
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
echo -n 'no valid user id entered, new user ids? [y\n]: '
fi
}