Skip to main content
 首页 » 编程设计

linux之使用陷阱将值设置为 var

2023年11月22日15jpfss

我在大学里有任务

你能帮帮我吗?

我需要改变使用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