运行unix'at'作业时出错

时间:2013-03-18 19:13:39

标签: unix while-loop at-job

代码是:

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

上的名字

看起来像猫Usr_List和$ i是问题,但我不知道如何解决这个问题。

由于

编辑: at工作发送一封电子邮件,说吉姆是意外的。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

发生了什么

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

jim
joe
tim

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

您想要发生什么

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

如何解决

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

at -k $wval <<ENDMARKER

at -k $wval <<"ENDMARKER"

它会很有用。

顺便提及,

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