我正在从命令行运行脚本,但是在放入cronjob时它会失败。我已经将其缩小到特别是用[-e“name”]测试文件存在的问题。通过在Ubuntu 32位桌面上运行,我可以编写以下脚本,并在从命令行调用时使其工作:
#!/bin/bash
# define statements
IMPORT="/home/${USER}/data_imports/fitb"
ARCHIVE="${IMPORT}/archive"
declare -a CENTERS
CENTERS[0]="ct"
CENTERS[1]="ny"
len=${#CENTERS[*]}
RUNDATE=`date --date=yesterday +"%m%d"`
ARCHIVEDATE=`date --date=yesterday +"%Y_%m_%d"`
i=0
while [ $i -lt $len ]; do
if [ -e "${ARCHIVE}/fitb_${ARCHIVEDATE}_${CENTERS[i]}.csv" ]
then touch ~/data_imports/fitb/shell_${i}.rn
fi
let i++
done
如果我注释掉“if”,“then”,&将touch命令放在自己的行上后,“fi”,while循环在cronjob中正常运行。如果我把if测试放回去,我什么也得不到。为了测试它是否被cron守护程序拾取,我将触摸命令移动到shebang之后的行,所以它是第一个运行的命令。这无法产生任何结果。我知道使用-e测试的文件位于正确的位置,具有全局rx权限。可能是 - 为了测试成功需要+ w吗?我认为这可能是因为变量不是由子壳所固有的(根据我的理解,tst是一种排序),但是如果是这种情况,我认为CLI调用也会失败。
答案 0 :(得分:2)
您似乎依赖于定义$ {USER}。当作为cronjob运行时,情况并非如此。