Bash 使用awk为变量赋值不适用于cron
从cron运行脚本时遇到问题。首先,我发现访问SQLite有困难;现在是AWK命令让我抓狂 问题在于:Bash 使用awk为变量赋值不适用于cron,bash,awk,Bash,Awk,从cron运行脚本时遇到问题。首先,我发现访问SQLite有困难;现在是AWK命令让我抓狂 问题在于: sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 不想用细节来打扰你;它是while循环的主线,必须读取文件中某列的值。它在命令行中工作得很好,但作为cron作业运行时,变量sen
sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens`
不想用细节来打扰你;它是while循环的主线,必须读取文件中某列的值。它在命令行中工作得很好,但作为cron作业运行时,变量sens没有任何价值
我已经检查过行中的所有变量都是read OK num、tipogalis等,所以我很确定问题与&&或print函数的数量有关
为了防止有人对环境变量提出建议,我已经在脚本的开头添加了以下几行:
LANG=en_US.UTF-8
export LANG
但没什么区别
还有其他建议吗?我知道问题一定很小。魔鬼总是在细节中…我假设您在cron中运行时已经验证了num和tipogalis变量的值是否正确 我猜您在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)
最后,正确的方法是: sens=awk-F,“{if$2=='${num}'&&&$4='$tipogalis'&&&$9='0'print$1}'/usr/xbow/xserve/galtel/relassen 但问题不在于线路。由于内部问题,我拨打了一个从未等于“0”的9美元的电话
对不起。这篇文章甚至可以完全删除,以避免混淆其他用户。谢谢Glenn,但这两个选项都没有任何改变。也许在从cron调用AWK语句时,我必须以不同的方式处理它?@Rorro,cron中的AWK没有什么特别之处。这可能是你没有给我们看的东西。由于从cron生成的作业的环境非常小,您确定脚本所依赖的路径或其他环境变量没有差异吗?