【发布时间】:2014-01-08 08:02:43
【问题描述】:
我有一个半长的 shell 命令,我需要在 php.ini 中执行它。我觉得我已经正确地转义了所有内容,但是从 php 的 exec() 函数执行时它无法正常工作。当我使用 exec() 运行命令时,它会无错误地退出,但无法正常运行。
我正在将包含电子邮件地址的列表文件与其他管道分隔信息与包含 md5 版本电子邮件地址的文本文件进行比较,以从原始列表中抑制。
这里是 bash 命令:
while read line ; do email=`echo "$line" | cut -d '|' -f1` ; if [ $(E=`echo -en "$email" | md5sum | awk '{print $1}'`; grep $E /path/to/suppressions | head -1 ;) ] ; then continue ; else echo $line ; fi done < /path/to/emails
/path/to/suppressions 是一个文本文件,包含要抑制的电子邮件地址的 md5 版本(它包含“emailtosuppress@domain.com”的 md5:
edb5feb3be7d0a4e1e250ccdf0c04ace
/path/to/emails 是一个文本文件,其中包含电子邮件地址列表以及其他一些分隔信息:
emailtokeep@domain.com|1000|1
emailtosuppress@domain.com|1000|1
当命令在 bash 中执行时,输出只是在抑制列表中不存在的电子邮件地址,并且它完美无缺:
emailtokeep@domain.com|1000|1
我遇到的问题是,当我在 php 中使用 exec() 执行相同的命令时,它会输出“电子邮件”文件中的所有行,而不会抑制抑制文件中的任何匹配项。
$supCommand = 'while read line ; do email=`echo "$line" | cut -d \'|\' -f1` ; if [ $(E=`echo -en "$email" | md5sum | awk \'{print $1}\'`; grep $E /path/to/suppressions | head -1 ;) ] ; then continue ; else echo $line ; fi done < /path/to/emails' ;
exec($supCommand, $supStatus) ;
print_r($supStatus) ;
我将命令用单引号括起来,并转义了命令中的四个单引号实例。如果有人有任何想法,我将非常感激。
提前致谢:)
【问题讨论】:
-
你不能在php中做所有这些吗?