【问题标题】:echo $variable in cron not workingcron 中的 echo $variable 不起作用
【发布时间】: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" &gt;&gt; /home/user/result.txt 的部分

有什么想法吗?

【问题讨论】:

  • VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrt xargs` | grep something)` 是一个非常不整洁的命令,你应该避免尝试解析ls 的输出。您想获取什么信息?
  • 除了关于那个乱七八糟的命令之外,ls -ltr `xargs`令人惊讶的奇怪/糟糕(虽然我猜很聪明)。
  • 对 ls 解析的批评不仅有效,而且很可能是您的问题——ls 对许多 shell 变量很敏感。如果您想要的只是文件名,则不需要 -l ;如果输出不是 tty,则 ls 每行只显示一个文件。无论如何,您想要的内容与 $(ls -lrt | tail -1 | grep something) 有何不同?

标签: linux bash shell cron


【解决方案1】:
VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrt `xargs` | grep something)

ls -ltr /path/to/dir在输出的文件名部分包含目录。然后,您使用此输出再次调用ls,这将查看您的当前目录,而不是/path/to/dir

在 cron 中,你的当前目录很可能是 /,而在你的手动测试中,我敢打赌你的当前目录是 /path/to/dir

这是在发出完整路径名的目录中查找最新文件的另一种方法:

stat -c '%Y %n' /path/to/dir/* | sort -nr | head -1 | cut -d" " -f 2-

需要 GNU stat,请检查您的手册页以了解您系统的正确调用。


我认为您的VARR 调用可以是:

latest_dir=$(stat -c '%Y %n' /path/to/dir/* | sort -nr | head -1 | cut -d" " -f 2-)
interesting_files=$(ls -ltr "$latest_dir"/*something*)

那么,就不需要临时文件了:

{
    echo "Resolve2 Backup"
    echo
    echo "$interesting_files"
} |
mail -s "Result $TODAY" email@email.com

【讨论】:

    【解决方案2】:

    感谢您的所有提示和回复。我解决了我的问题。问题是 cron 的 8 美元和 9 美元的输出。我不知道在 cron 中运行时读取的是什么特殊字段。我只是一个脚本新手,很抱歉我的脚本不好=)

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2012-09-29
      • 2013-09-10
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2013-11-28
      相关资源
      最近更新 更多