0

代码是:

at -k $wval <<ENDMARKER

while [[ -s Usr_List ]]; do
    for i in $(cat Usr_List); do
        if finger -m | grep $i; then
            echo "$i is online" | elm $mval
            sed "/$i/d" <Usr_List >tmplist
            mv tmplist Usr_List
        fi
     done
done

ENDMARKER

从实际工作来看,它是

while [[ -s Usr_List ]]; do
    for i in jim
joe 
tim; do
        if finger -m |grep ; then
            echo " is online" | elm jack
            sed "//d" <Usr_List >tmplist
            mv tmplist Usr_List
        fi
     done
done

jim joe 和 tim 是列表 Usr_List 上的名称

似乎 cat Usr_List 和 $i 是问题,但我不知道如何解决这个问题。

谢谢

编辑: at 工作发送一封电子邮件,说 jim 出乎意料。

4

2 回答 2

0

发生了什么

问题是当您输入 at 命令时,您的 here-doc 中的行正在被扩展。这意味着外壳扩展$(cat Usr_List)为:

jim
joe
tim

并且它扩展$i为空字符串,因为它尚未定义。

你想发生什么

您真的希望在at命令触发时扩展这些变量,而不是在您告诉at命令要做什么时。

如何修复它

为了防止 shell 扩展 here-doc 中的变量,您可以简单地在开头引用分隔符。所以,改变你的第一行:

at -k $wval <<ENDMARKER

at -k $wval <<"ENDMARKER"

它会很好用。

顺便,

我很好奇,因为我的at命令没有-k选项——那应该做什么?

于 2013-08-07T19:37:48.237 回答
0

检查man at,特别是关于“....稍后执行,使用 /bin/sh.”的部分。您显示的脚本是有效的bash,但根据/bin/sh您系统上的内容,可能不是有效的语法。

于 2013-03-18T19:52:29.443 回答