从cron运行时,无法从shell脚本中的for循环访问值

时间:2011-10-28 18:36:43

标签: shell parameters cron

这是我第一次涉足shell脚本,所以如果我问一个非常基本的问题,请温柔地对我说!

我有一个通过FTP下载文件的shell脚本,使用split将文件拆分为单独的较小文件。然后我使用for循环调用一个PHP文件,对文件进行一些处理,这个PHP进程在后台运行完成。

这个2脚本组合在从sudo下的命令行运行时工作正常,但是当它从cron运行时,我似乎无法获取文件名值以传递给PHP。

我的2个测试脚本如下

shell-test.sh

#!/bin/bash

cd /path/to/directory/containing/split/files/

#Split the file into seperate 80k line files
split -l 80000 /path/to/file/needing/to/be/split/

#Get the current epoch time as all scripts will need to use the same update time
epochtime=$(date +"%s")

echo $epochtime

#Output a list of the files in the directory
ls


#For loop to run through each file in the working directory
#For each file we run the php script with safe mode off (to enable access to includes)
#We pass in the name of the file and epochtime
#The ampersand at the end of the string runs the file in the background in parallel so     that all scripts execute concurrently

for file in *
do
php -d safe_mode=Off /path/to/php/script/shell-test.php -f $file -t $epochtime &
done

#Wait for all scripts to finish
wait

壳test.php的

<?php

$scriptOptions = getopt("f:t:");

print_r($scriptOptions);

?>

从命令行运行时,输出以下内容,这是我需要的 - 文件值传递给PHP脚本。

1319824758
xaa  xab  xac  xad
Array
(
[f] => xaa
[t] => 1319824758
)
Array
(
[f] => xac
[t] => 1319824758
)
Array
(
[f] => xad
[t] => 1319824758
)
Array
(
[f] => xab
[t] => 1319824758
)

然而,当通过cron运行时,输出以下内容

1319825522
xaa
xab
xac
xad
Array
(
[f] => *
[t] => 1319825522
)

所以我需要知道的是如何获取*作为文件名的值而不是实际的字符串*(以及为什么这样做也会有用!)。

1 个答案:

答案 0 :(得分:2)

我的随机猜测是cron正在使用-f选项运行shell以确保安全。尝试添加

set +f

到您的脚本。或者找一些其他枚举文件的方法。