运行cron bash脚本时出现env问题
我有一个由cron执行的夜间报告,其中包含以下行:
PRINTFX="/usr/bin/printf" <snip> ${PRINTFX} "%-11s %-11s %'dn" ${F1} ${F2} ${F3} Crontab条目: [ca-adm@homwpspect01 ~]$crontab -l 55 01 * * * /usr/local/sbin/CRONSQLEvents 我的问题是,如果我以root身份手动运行(即使用我的登录环境设置),我会得到[CORRECT]输出: Date Event Count 2013-02-19 0x00010802 516,616 2013-02-19 0x00010D66 351,840 2013-02-19 0x00010D67 351,533 当cron作为另一个用户运行时,我得到[InCorrect]: Date Event Count 2013-02-19 0x00010802 516616 2013-02-19 0x00010D66 351840 2013-02-19 0x00010D67 351533 如果它由cron运行,则逗号从数字输出中丢失.我记得读过一些关于printf的使用是不明确的,因为有一个bash内部函数,但在/usr/bin中还有一个外部: [root@homwpspect01 sbin]# which printf printf is a shell builtin printf is /usr/bin/printf 有人能告诉我如何避免cron与登录执行中的这个问题? 提前致谢, 解决方法
使用%’d打印的数字格式取决于当前的区域设置,而不是(必须)您正在使用的printf命令.
如果您的脚本与您向我们展示的那样,那么您正在调用/usr/bin/printf. 在我的系统上: $echo $LANG en_US.UTF-8 $printf "%'dn" 123456 123,456 $/usr/bin/printf "%'dn" 123456 123,456 $LANG=C printf "%'dn" 123456 123456 $LANG=C /usr/bin/printf "%'dn" 123456 123456 $ Bash的内置printf和/usr/bin/printf(来自GNU Coreutils)表现一致. 您可能需要在脚本中设置$LANG以获得所需的行为. %d格式记录在GNU libc manual中:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |