【发布时间】:2012-04-10 00:14:41
【问题描述】:
我有一个打算从 cron 运行的 bash 脚本。该脚本计算文档中的字数,并将当前时间和字数添加到 CSV 文件中。在相关部分,脚本是:
EPOCH=$(date +"%s")
WCC=$(wc -w ~/path/filename.txt | sed 's/\/Users\/username\/path\/filename.txt//' | sed 's/ //g')
echo $EPOCH,$WCCH4 >> ~/path/wordcount-data.csv
此脚本从 cron 运行,具有以下条目:
0 * * * * sh /Users/username/path/wordcount.sh
问题是wc -w 从 cron 运行时返回的值与从 shell 运行或从终端中执行的 shell 脚本运行时返回的值不同。换句话说,从 cron 执行的这个脚本的值当前是 12438,但是在 shell 中运行 wc -w filename.txt 或运行 sh ./wordcount.sh 都返回值 12445。值得一提的是,差异始终是 7,并且 vim 的字数匹配字数统计来自 cron。
是什么导致了不同的值,我该如何解决?
【问题讨论】:
-
看起来是语言环境问题。您的
filename.txt是否包含任何非 ASCII 字符?LANG=C wc -w filename.txt产生了什么? -
尝试运行一个简单地记录 cron 为您设置的环境的 cron 作业:
/usr/bin/env > /tmp/env.cron。可能会有一组非常小的值集。当问题是“它可以从命令行工作,但不能从cron工作”时,答案是(99% 的时间)environment。