cat "${pos}" | /usr/bin/iconv -f CP1251 -t UTF-8 | uniq | sed -En "/^CLIENT_ID.*/!p" | while read line
do
.....
......
cat >> "$TMPFILE" << EOF
INSERT INTO ......;
EOF
done
正如您所看到的,每次迭代都会将一条SQL语句写入tmp文件。 我从常规的交互式shell中启动了这个脚本并获得了预期的输出。从一个cron工作开始 - 没什么。
经过调查我发现了一个问题。当我使用"$TMPFILE"
而没有""
时,脚本可以正常工作。为什么会这样?
OS:FreeBSD,bourne shell。
答案 0 :(得分:0)
IIRC,cron
并不提供登录shell所做的所有文件,因此您最终会得到不同的环境变量设置。例如,从$TMPFILE
运行时,cron
指向的路径可能包含空格。
此外,在某些系统上(取决于设置),cron
使用不同的shell。因此,如果从命令行启动脚本,例如可能会使用/usr/bin/sh
,而在cron
启动时,则使用/bin/sh
。 (我没有* BSD的经验,但我在linux上观察过这个。)