我在大学里有任务
你能帮帮我吗?
我需要改变使用陷阱的方法 并使用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
我的亨德勒代码:
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 =“*”}不起作用
你对此有什么解决方案吗?
答案 0 :(得分:1)
这一行是问题所在:
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