我需要在shell脚本中编写CRTL + D的代码,以退出并显示代码的结果。 在我的代码中,它的目标不是“再见”,我试图在google和其他网站上找到一种解决方案,以用CTRL + D代码替换“再见”。
你能帮我吗?
这是我的代码:
touch file.txt
while :
do
shopt -s nocasematch
read INPUT_STRING
case $INPUT_STRING in
bob)
echo "boy">>file.txt
;;
alicia)
echo "girl">>file.txt
;;
cookie)
echo "dog">>file.txt
;;
bye)
cat file.txt
break
echo " "
;;
*)
echo "unknown">>file.txt
;;
esac
done
答案 0 :(得分:2)
CTRL+D
不是发送到输入的序列,而是关闭输入,因此在CTRL+D
read
之后将以非空退出代码退出,并且变量INPUT_STRING
将是空的。在脚本中,未检查读取的退出代码。根据您的需要,您可以检查INPUT_STRING是否为空,也可以检查读取的退出代码。
while read INPUT_STRING; do
...
done
# put the code after
cat file.txt ...
或
while :; do
...
read INPUT_STRING || break
...
done
# put the code after
cat file.txt ...
或
case $INPUT_STRING in
...
'') # to match empty INPUT_STRING (could be because of CTRL+D)
答案 1 :(得分:1)
在进入案件之前如何检查read的返回状态?
例如:
if [ $? -eq 1 ] ;
...
fi
我认为您无法更改read的行为以将ctrl-d捕获在结果变量中。