我正在ansible剧本中运行一个shell命令,我想在其中存储输出的最后一行,但出现以下错误:
致命:[网络服务器]:失败! => {“ changed”:true,“ cmd”:“ ./ hash.sh -p admin123 |&tail -1 ”,“ delta”:“ 0:00:00.002563”,“结束“:”“ 2019-06-06 16:25:56.597951”,“失败”:true,“ msg”:“非零返回码”,“ rc”:2,“开始”:“ 2019-06-06 16 :25:56.595388“,” stderr“:” / bin / sh:1:语法错误:\“&\”意外“,” stderr_lines“:[” / bin / sh:1:语法错误:\“&\”意外”],“ stdout”:“”,“ stdout_lines”:[]}
main.yaml
HttpSession session = request.getSession();
if(session == null){
System.println("session is null");
}else{
Object _id = session.getAttribute("id");
ObjectId id = _id != null ? new ObjectId((String)_id) : _id;
}
当我直接在远程计算机上运行该命令(- name: Get hash value of admin password
shell: "./hash.sh -p {{admin_password}} |& tail -1"
args:
chdir: /usr/share/tools
register: admin_password_hash
)时,它会为我提供正确的输出。
答案 0 :(得分:4)
假设您是说|&
将通过管道重定向stderr,则cmd1 |& cmd2
的POSIX兼容替代方案(因此,与/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使用的密码!)