2013-02-20 34 views
4

當我有一個由cron下列行中它執行的夜間報告:ENV問題上運行的cron bash腳本

PRINTFX="/usr/bin/printf" 
<snip> 
${PRINTFX} "%-11s %-11s %'d\n" ${F1} ${F2} ${F3} 

crontab條目:

[[email protected] ~]$ crontab -l 
55  01  *  *  *  /usr/local/sbin/CRONSQLEvents 

我的問題是,如果我手動運行此作爲根(即,與我的登錄ENV設置),我得到這個[CORRECT]輸出:

Date  Event  Count 
2013-02-19 0x00010802 516,616 
2013-02-19 0x00010D66 351,840 
2013-02-19 0x00010D67 351,533 

當由cron作爲anothe運行[R用戶,我得到[不正確]:

Date  Event  Count 
2013-02-19 0x00010802 516616 
2013-02-19 0x00010D66 351840 
2013-02-19 0x00010D67 351533 

如果它是由cron運行,逗號從數字輸出失蹤。我記得讀一些有關使用printf的是模棱兩可的,因爲有一個bash內部的功能,但也有在/ usr/bin中外部:

[[email protected] sbin]# which printf 
printf is a shell builtin 
printf is /usr/bin/printf 

誰能告訴我如何避免與cron的這個問題與記錄在執行? 尤其是,我在腳本中指定了/ usr/bin/printf?

由於提前, 唐

回答

4

印有%'d一個數的格式取決於當前區域,而不是(一定)您使用的在其上printf命令。

如果您的腳本正如您向我們顯示的那樣,您正在調用/usr/bin/printf

在我的系統:

$ echo $LANG 
en_US.UTF-8 
$ printf "%'d\n" 123456 
123,456 
$ /usr/bin/printf "%'d\n" 123456 
123,456 
$ LANG=C printf "%'d\n" 123456 
123456 
$ LANG=C /usr/bin/printf "%'d\n" 123456 
123456 
$ 

bash的內置printf/usr/bin/printf(從GNU Coreutils的)行爲一致。

您可能需要在腳本中設置$LANG才能獲得所需的行爲。

%'d格式記錄在GNU libc manual

由於區域設置指定

'

獨立數字成組指定 爲LC_NUMERIC類; * 注意一般數字::。該標誌是一個 GNU擴展。

+0

謝謝你 - 這肯定是問題 - 我能得到現在這個工作正常... – netdesignate 2013-02-20 17:06:19

0

所以得到這個正常工作,我會加入這一行的腳本:

export LANG=en_US.UTF-8 
PRINTFX="/usr/bin/printf" 
<snip> 
${PRINTFX} "%-11s %-11s %'d\n" ${F1} ${F2} ${F3}