sh:用heredoc替换变量

时间:2014-05-30 06:45:59

标签: sh

 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。

1 个答案:

答案 0 :(得分:0)

IIRC,cron并不提供登录shell所做的所有文件,因此您最终会得到不同的环境变量设置。例如,从$TMPFILE运行时,cron指向的路径可能包含空格。

此外,在某些系统上(取决于设置),cron使用不同的shell。因此,如果从命令行启动脚本,例如可能会使用/usr/bin/sh,而在cron启动时,则使用/bin/sh。 (我没有* BSD的经验,但我在linux上观察过这个。)

相关问题