【发布时间】:2015-07-28 10:10:46
【问题描述】:
当由 cron 运行时,我无法打印以下结果。我在 /usr/local/bin/test 下有一个脚本名称
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ARAW=`date +%y%m%d`
NAME=`hostname`
TODAY=`date '+%D %r'`
cd /directory/bar/foo/
VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrt `xargs` | grep something)
echo "Resolve2 Backup" > /home/user/result.txt
echo " " >> /home/user/result.txt
echo "$VARR" >> /home/user/result.txt
mail -s "Result $TODAY" email@email.com < /home/user/result.txt
我在 /etc/cron.d/test 中将其配置为每天凌晨 1 点运行:
00 1 * * * root /usr/local/bin/test
当我在命令行中手动运行它时
# /usr/local/bin/test
我得到了完整的价值。但是当我让 cron 完成这项工作时,它永远不会显示 echo "$VARR" >> /home/user/result.txt 的部分
有什么想法吗?
【问题讨论】:
-
VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrtxargs` | grep something)` 是一个非常不整洁的命令,你应该避免尝试解析ls的输出。您想获取什么信息? -
除了关于那个乱七八糟的命令之外,
ls -ltr `xargs`是令人惊讶的奇怪/糟糕(虽然我猜很聪明)。 -
对 ls 解析的批评不仅有效,而且很可能是您的问题——ls 对许多 shell 变量很敏感。如果您想要的只是文件名,则不需要 -l ;如果输出不是 tty,则 ls 每行只显示一个文件。无论如何,您想要的内容与 $(ls -lrt | tail -1 | grep something) 有何不同?