从crontab运行linux comm时会产生不同的结果

从crontab运行linux comm时会产生不同的结果,cron,comm,Cron,Comm,我正在从bash脚本运行以下命令: comm -23 file1 file2 > file3 (file1和file2首先进行重复数据消除和排序) 这将生成一个file3,其中包含仅对file1唯一的行(我想要的) 从命令行运行脚本时,不存在任何问题。但是,当从crontab运行时,它会生成一个更大(不正确)的文件3。手动运行时,crontab用户与登录用户相同 有什么线索可以说明是什么导致了这种差异 提前感谢从shell运行的程序和从cron运行的程序之间几乎所有的差异都与环境有关 首

我正在从bash脚本运行以下命令:

comm -23 file1 file2 > file3
file1
file2
首先进行重复数据消除和排序)

这将生成一个
file3
,其中包含仅对
file1
唯一的行(我想要的)

从命令行运行脚本时,不存在任何问题。但是,当从
crontab
运行时,它会生成一个更大(不正确)的
文件3
。手动运行时,
crontab
用户与登录用户相同

有什么线索可以说明是什么导致了这种差异

提前感谢

从shell运行的程序和从
cron
运行的程序之间几乎所有的差异都与环境有关

首先要做的是在这两个位置运行类似于
env
的程序并捕获输出。它可能很简单,因为路径不同,所以运行不同的可执行文件

另一种可能是两种环境之间的
LC\u COLLATE
设置不同。从
info
页面:

在使用
comm
之前,必须使用
LC\u COLLATE
区域设置指定的排序顺序对输入文件进行排序


--check order
选项可能是检查这一点的一种方法,在未排序的输入(包括基于您认为使用的不同排序规则的未排序输入)上导致致命错误。

命令行中的“locale”返回LC_COLLATE=“en_US.UTF-8”,从crontab脚本返回LC_COLLATE=“POSIX”。我不确定这一切到底意味着什么以及该怎么办,但听起来这就是原因。感谢应该很容易检查,@Ben,在命令行上将
LC_-COLLATE
设置为
POSIX
,看看他们是否开始彼此同意。实际上,我正在使用“shell_-exec()”从PHP客户端模式脚本运行Linux“comm”(以及排序、连接等)。我添加了putenv('LC_COLLATE=en_US.UTF-8');到php脚本的开头。这就解决了问题。cron的行为不再不同。再次感谢paxdiablo的见解。