2012-04-11 79 views
0

从cron运行脚本时遇到问题。首先,我发现访问SQLite有困难;现在是AWK命令让我疯狂。使用awk为变量赋值并不适用于cron

问题的行是这样的:

sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 

不想用细节来打扰你;它是while循环的主线,它必须读取文件中的列值。它可以从命令行完美工作,但作为cron作业运行不会给变量“sens”带来任何价值。

我已经检查出行内的所有变量都是OK(num,tipogalis等),所以我很确定这个问题与“& &”的数量有关,或者与“print “功能。

以防万一有人想提出有关环境瓦尔东西,我已经添加了以下线在脚本的beggining:

LANG=en_US.UTF-8 
export LANG 

但并没有区别。

有其他建议吗?我知道这个问题一定很小。魔鬼总是在细节...

回答

0

我假设你已经验证,当你在cron中运行时,numtipogalis变量保持正确的值。

我猜你缺少awk if语句中常量的引号。

sens=`awk -F, '{ if($2 == "'${num}'" && $4 == "'$tipogalis'" && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 

我会使用-v选项的值传递到awk的,而不是拼凑引用的。

sens=$(awk -F, -v val2="$num" -v val4="$tipogalis" '$2 == val2 && $4 == val4 && $9 == "0" {print $1}' /usr/xbow/xserve/galtel/relasens) 
+0

感谢Glenn,但是这两个选项都没有做任何改变。也许有一件事我不得不以不同的方式用AWK语句从cron调用它来做? – Rorro 2012-04-11 15:50:26

+0

@Rorro,在cron中没有什么特别的awk。这可能是你没有向我们展示的东西。由于cron产生的工作环境非常少,您确定它不是您的脚本所依赖的PATH或其他环境变量的差异吗? – 2012-04-11 15:53:12

0

最终正确的方法是这样:

SENS = awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == '0')print $1 }' /usr/xbow/xserve/galtel/relasens

但问题是不是就行了。由于内部问题,我的电话是9美元,从不等于'0'。

对不起。这篇文章甚至可以完全删除,以免混淆其他用户。