我们有一个 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 并通过dos2unix
或sed -i 's/\r//'
其他方式运行它。搜索“回车符”应该会带来一些点击。