我在大学里有任务
你能帮帮我吗?
我需要改变使用trap的方法 并使用 tail -n 0 -f 添加或相乘
我的生成器代码:
rm info.txt
touch info.txt && chmod u+x info.txt
while true;
do
read line
case $line in
"quit")
echo $line >> info.txt
exit
;;
"+")
kill -USR1 $(cat .pid)
;;
"*")
kill -USR2 $(cat .pid)
;;
*)
echo $line >> info.txt
;;
esac
done
我的hundler代码:
echo $$ > .pid
ME="+";
value=1;
multipl(){
ME="*"
}
plus(){
ME="+"
}
trap 'multipl' USR1
trap 'plus' USR2
(tail -n 0 -f info.txt) | while true
do
read line
case $line in
"quit")
echo "quit"
killall tail
exit
;;
*)
if (echo "$line" | grep -Eq "^-?[0-9]+$")
then
if [[ "$ME" == "+" ]]
then
let value=$value+$line
fi
if [[ "$ME" == "*" ]]
then
let value=$value*$line
fi
echo $value
else
echo "error"
killall tail
exit
fi
esac
sleep 1
done
但是我的 multipl(){ ME="*"} 不工作
您对此有什么解决方案吗?
请您参考如下方法:
这一行是问题所在:
let value=$value*$line
因为未加引号,*
将扩展为当前目录中的文件列表 -- http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions
你想要这个
let "value=$value*$line"
或者使用特定于 bash 的算术语法
(( value *= line ))
“不工作”作为问题报告是完全没有用的。
你是在引用“$ME”吗?考虑一下:
$ ls
file1 file2 file3
$ multipl(){
ME="*"
}
$ multipl
$ echo "$ME"
*
$ echo $ME
file1 file2 file3