shell - 在ansible中无法识别Shell“|&”语法
问题描述
我在 ansible playbook 中运行一个 shell 命令,我想在其中存储输出的最后一行但是出现以下错误:
致命:[网络服务器]:失败!=> {“已更改”:true,“cmd”:“ ./hash.sh -p admin123 |& tail -1 ”,“delta”:“0:00:00.002563”,“end”:“2019-06- 06 16:25:56.597951", "failed": true, "msg": "非零返回码", "rc": 2, "start": "2019-06-06 16:25:56.595388", " stderr": "/bin/sh: 1: 语法错误: \"&\" unexpected", "stderr_lines": ["/bin/sh: 1: 语法错误: \"&\" unexpected"], "stdout" :“”,“stdout_lines”:[]}
主要.yaml
- name: Get hash value of admin password
shell: "./hash.sh -p {{admin_password}} |& tail -1"
args:
chdir: /usr/share/tools
register: admin_password_hash
./hash.sh -p admin123 |& tail -1
当我直接在远程机器上运行该命令 () 时,它给了我正确的输出。
解决方案
假设您的意思|&
是通过管道重定向 stderr,则符合 POSIX 的替代方案cmd1 |& cmd2
(因此,与 一起工作的方式/bin/sh
)是cmd1 2>&1 | cmd2
:
- name: "Get hash value of admin password"
shell: "./hash.sh -p {{admin_password | quote}} 2>&1 | tail -1"
args:
chdir: /usr/share/tools
register: admin_password_hash
这| quote
很重要:如果没有它,您可能会出现重大安全问题,因为选择$(rm -rf /*)
密码的人可能会导致您的整个系统被擦除。(我敢说这是Bobby Tables使用的密码!)
推荐阅读
- python - 在自定义函数的上下文中,在 Python 中四舍五入十进制数的最简单方法是什么?
- javascript - 如何从 Mongodb 获取数据并将其显示在相应的 html 表单字段中?
- linux - 在 ubuntu 上安装 node-sspi 时出错
- c# - 对于 .NET 字典,双重哈希如何工作?
- javascript - 如何使用 vuetify 使我的 v-menu 正确显示
- tomcat - 在休息服务中使用注入点失败
- ecmascript-6 - Jest JSDom 中未实现 window.location.assign()
- c# - 如何从音频文件中获取频谱图?
- github - 尽管 git config 中有正确的用户名和电子邮件,但无法推送到我在 github 上的仓库
- html - 将 Html 渲染为 pdf 时 Html 标签不起作用