RHEL7 Cron 条目给出不明确的重定向错误?

RHEL7 Cron 条目给出不明确的重定向错误?

我们有一个 crontab 条目最终发送了一个不明确的重定向错误。很确定这是读取日期的命令,但不知道如何修复。还有其他解决方案吗?

/bin/sh 重定向到 /bin/bash

 /opt/startup-shutdown/startup.instances Other > /tmp/`date +%Y%m%d%H%M%S`-cron.log 2>&1

给出:

/bin/sh: 1  
: ambiguous redirect

答案1

crontab 使用%出于特殊目的:

该行的整个命令部分,直到换行符或 % 字符,将由 /bin/sh 或 crontab 文件的 SHELL 变量中指定的 shell 执行。命令中的百分号 (%),除非用反斜杠 () 转义,否则将被更改为换行符,并且第一个 % 之后的所有数据都将作为标准输入发送到命令。

如果将日期命令放入 crontab 中,每一个 %必须用反斜杠引用。

答案2

我认为这是一个回车问题。

这就是 Bash 给出的错误,例如,如果重定向运算符右侧的单词扩展到多个字段(例如,如echo > *gets中所示) bash: *: ambiguous redirect

这里,它提到了1,后面有一个换行符。我可以通过具有 的输入得到类似的错误2>&1<CR><LF>,例如:

$ printf 'echo foo 2>&1\r\n' |bash
: ambiguous redirect

在那里,CR 将光标移动到行的开头,因此后面的任何内容都会覆盖第一部分。这里 CR 可见:

$ printf 'echo foo 2>&1\r\n' |bash 2>&1|cat -A
bash: line 1: 1^M: ambiguous redirect$

我不知道为什么在你的情况下 CR 会被打印为常规换行符,这可能是终端设置。

检查您的文件是否来自 Windows 并通过dos2unixsed -i 's/\r//'其他方式运行它。搜索“回车符”应该会带来一些点击。

相关内容