gpt4 book ai didi

shell - Ansible:shell脚本输出始终为空

转载 作者:行者123 更新时间:2023-12-01 01:54:37 34 4
gpt4 key购买 nike

我正在尝试将 Linux shell 的输出插入到变量中,但由于某种原因,该变量始终为空。

这是 Ansible 代码:

  - name: Check PHP version
shell: php -v 2> /dev/null | awk '{print $2; exit}'
register: php_version

- debug: var=php_version

这是输出:
ok: [10.0.0.5] => {
"php_version": {
"changed": true,
"cmd": "php -v 2> /dev/null | awk '{print $2; exit}'",
"delta": "0:00:00.015180",
"end": "2017-01-08 18:41:00.323773",
"rc": 0,
"start": "2017-01-08 18:41:00.308593",
"stderr": "",
"stdout": "",
"stdout_lines": [],
"warnings": []
}
}

当我直接在服务器上运行命令时,我得到一个有效的结果:
php -v 2> /dev/null | awk '{print $2; exit}'
7.0.14

可能是什么问题?

最佳答案

至于可能的原因,为什么您可以从 CLI 运行命令,而不是 Ansible,很可能是 php 的路径PATH 中未定义可执行文件当您通过非交互式 SSH session *(如 Ansible 所做的那样)运行 shell 时的变量。

使用完整路径,而不仅仅是 phpshell模块参数。

What could be the issue?



当您在 shell 调用中使用管道时,返回代码将是最后一个命令( awk )的代码,尽管第一个命令失败,但您不会收到通知。

awk 没有得到任何输入来处理,它优雅地退出,因为您将 stderr 重定向到 /dev/null您没有看到来自 php 的任何错误命令。

例如,如果您显式运行一个不存在的命令:
- name: Check PHP version
shell: qwerty -v 2> /dev/null | awk '{print $2; exit}'
register: php_version

- debug: var=php_version

您还将获得:
"rc": 0,
"start": "2017-01-09 06:35:10.588258",
"stderr": "",
"stdout": "",
"stdout_lines": [],
"warnings": []

* 见 Difference between Login Shell and Non-Login Shell?关于 Unix.SE 的问题。

关于shell - Ansible:shell脚本输出始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41535189/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com