代码是:
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工作发送一封电子邮件,说吉姆是意外的。
答案 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
选项 - 应该做什么?