加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

运行cron bash脚本时出现env问题

发布时间:2020-12-15 21:06:19 所属栏目:安全 来源:网络整理
导读:我有一个由cron执行的夜间报告,其中包含以下行: PRINTFX="/usr/bin/printf"snip${PRINTFX} "%-11s %-11s %'dn" ${F1} ${F2} ${F3} Crontab条目: [ca-adm@homwpspect01 ~]$crontab -l55 01 * * * /usr/local/sbin/CRONSQLEvents 我的问题是,如果我以root身
我有一个由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与登录执行中的这个问题?
特别是考虑到我在脚本中指定了/usr/bin/printf?

提前致谢,

解决方法

使用%’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中:

'

Separate the digits into groups as specified by the locale specified
for the LC_NUMERIC category; *note General Numeric::. This flag is a GNU extension.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读