【发布时间】:2018-12-30 07:14:09
【问题描述】:
如果命令在EOF 中没有返回任何输出,我希望我的命令以失败状态 (1) 退出。但我无法使用变量来存储命令或将输出存储在文件中。
例如:
#!/bin/bash
a='Some other commands in local machine'
ssh ubuntu@xx.xx.xx.xx << EOF
echo $a;
ldt=$(date +'%Y%m%d')
awk -v start="$(date +'%Y/%m/%d %H:%M' --date '-1000 min')" - F'[[:space:]]*[|][[:space:]]*' '
(\$4>=start) && /INFO: Server startup in/
' /some/file/path-\$ldt.log
EOF
现在,如果命令给出一个空输出,它应该是exit 1,如果显示一些文本,它应该是exit 0。
我无法将awk 命令存储在变量中。如果我将它存储在变量中,awk 命令不起作用。尝试将输出存储在文件中,但这也失败了。
请帮我找到解决办法。
【问题讨论】:
-
它“不起作用”,因为未引用的 heredoc 导致在远程代码运行之前发生扩展。不要那样做。
-
我假设
ldt应该是“本地”日期时间?最初不是——date是由本地机器运行的,而不是远程机器。 -
本地机器或远程机器上的日期相同,所以@CharlesDuffy 没有关系
-
...但是如果您的日期格式中包含空格,这会很重要 --
ldt=$(date '+%Y%m%d %H%M%S')如果作为本地命令运行很好,但会尝试运行您的%H%M%S结果为带有环境变量ldt的命令,否则导出,因为在本地运行扩展时,远程 shell 将空间视为语法上重要的,而不是数据。也就是说,这是一个值得内化并养成思考习惯的差异。 -
@CharlesDuffy 是的,你是对的,是我的错误。我会更加小心。
标签: bash shell eof exit-code heredoc