Ansible:shell 脚本输出始终为空

2024-04-11

我试图将 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

可能是什么问题?


As to possible reasons, why you can run the command from CLI, but not Ansible, most likely the path to the php executable is not defined in the PATH variable when you run shell through a non-interactive SSH session* (as Ansible does).

使用完整路径而不仅仅是php in the shell模块参数。


可能是什么问题?

当您在 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": []

* See the Difference between Login Shell and Non-Login Shell? https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell question on Unix.SE.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible:shell 脚本输出始终为空 的相关文章

  • 使用 Bash 将 KB 转换为 MB

    我使用命令来获取远程文件夹的大小 运行后它会返回 120928312 http blah com 数字大小为bytes 我想做的就是让它输出MB 以及http部分被移除 我猜想 grep 到一个文件 但不知道如何去做 您可以使用 shell
  • 更改grep命令的分隔符

    我在用grep检测 a href xxxx something here a 当链接在输入中分成两行时 这不起作用 我想 grep 检查直到它检测到但现在它只是将输入输入到 grep 中 直到检测到新行为止 所以如果输入是这样的 a hre
  • 无法将属性与数字进行比较。错误:“‘AnsibleUnsafeText’和‘int’实例之间不支持”

    getent database passwd debug var getent passwd dict2items selectattr value 1 gt 1000 map attribute key list 输出是 TASK deb
  • PHP shell_exec() 与 exec()

    我正在努力理解之间的区别shell exec and exec 我一直用exec 执行服务器端命令 我什么时候使用shell exec Is shell exec 只是一个简写exec 似乎参数更少 效果是一样的 shell exec以字符
  • 如何在 AOSP 中向预构建应用程序(无源代码)添加额外权限

    我有一个没有特定 android 权限的应用程序 例如android permission CHANGE CONFIGURATION 我没有它的源代码 我正在开发 AOSP 我预先构建了这个应用程序 如下所示 将APK放入 device m
  • -bash: /usr/bin/virtualenvwrapper.sh: 没有这样的文件或目录

    我无法弄清楚 shell 试图在哪里运行 usr bin virtualenvwrapper sh服务器登录时 我希望 virtualenvwrapper 永久卸载 而不仅仅是从 shell 实例中删除 我以为我卸载了它pip uninst
  • 如何完善这个FTP(shell)功能?

    我有大量使用以下函数的脚本 Copies files over using FTP Configurations set at the beggining of the script param 1 FTP Host 2 FTP User
  • Zsh 颜色部分制表符补全

    是否可以在Zsh中对部分完成结果的已完成部分进行着色 Fish 默认执行此操作 至少在 Gentoo 中 如下图所示 全尺寸图像 https i stack imgur com KaL1g png https i stack imgur c
  • 创建 QT 应用程序作为 Windows 上现有基于控制台的应用程序的 GUI

    我正在尝试使用 Qt 为现有应用程序设置一个 GUI 该应用程序旨在在 Windows 命令行中运行 这不仅仅是运行应用程序system 命令 但我需要通过命令行与现有应用程序交互 The system 当我启动现有的可执行文件时 命令会阻
  • 删除损坏的链接 Unix

    我想删除损坏的链接 但在此之前我想确认目录中是否存在链接文件 我们来调用一下链接A if a A then print ya A is ther fi But if A链接已损坏 那么我该如何检查 find L type l找到损坏的符号链
  • 用于解析文件( csv )并逐行处理的 Shell 脚本[重复]

    这个问题在这里已经有答案了 您好 需要一个 shell 脚本来解析 csv 文件 逐行解析 然后逐个字段 该文件将如下所示 X1 X2 X3 X4 Y1 Y2 Y3 Y4 我需要提取这些 X1 X2 我写了一个脚本 但如果行超过一行 它就会
  • 在snakemake规则中使用pyenv

    我正在使用 Snakemake 来实现一个漫长而复杂的管道 其中涉及一些外部编写的 python2 脚本 当我尝试使用 pyenv 指定 python2 时 pyenv shell命令失败 同时pyenv global and pyenv
  • 命令行/shell 帮助文本是否有“标准”格式?

    如果没有 是否有事实上的标准 基本上我正在编写命令行帮助文本 如下所示 usage app name options required input required input2 options a argument Does someth
  • 如何在 python 解释器 shell 中重复最后一个命令?

    如何重复上一条命令 常用键 向上 Ctrl 向上 Alt p 不起作用 他们创造出无意义的人物 ve kakarukeys localhost ve python Python 2 6 6 r266 84292 Nov 15 2010 21
  • 使用 nzsql 将数据导出到 CSV

    我想从 netezza 将数据导出为 CSV 数据由数百万行记录组成 数据应位于引号内 并应使用 作为分隔符 例如 a b c 每当您想要从 Netezza 导出数据时 您都会需要使用其外部表功能 如果要导出到 Netezza 主机本地安装
  • 如何让SSH命令执行超时

    我有一个这样的程序 ssh q email protected cdn cgi l email protection exit echo output value gt 在上面的代码中 我尝试通过 SSH 连接到远程服务器 并尝试检查是否可
  • shell进程的并行执行

    有没有一个工具可以在 Windows 批处理文件中并行执行多个进程 我发现了一些有趣的 Linux 工具 parallel http mi eng cam ac uk er258 code parallel html and PPSS ht
  • 在大型文本文件中查找重复记录

    我在一台 Linux 机器 Redhat 上 并且有一个 11GB 的文本文件 文本文件中的每一行包含单个记录的数据 并且该行的前 n 个字符包含该记录的唯一标识符 该文件包含略多于 2700 万条记录 我需要验证文件中不存在具有相同唯一标
  • 将 stdout 和 stderr 捕获到不同的变量中

    是否可以存储或捕获 stdout 和 stderr不同的变量 不使用临时文件 现在我这样做是为了获得标准输出out和标准错误err跑步时some command 但我会 喜欢避免临时文件 error file mktemp out some
  • 使用 AWK 或 SED 以及以下标签以逗号分隔

    使用 AWK 或 SED 以及下面使用的标签以逗号分隔 BEGIN AccountID BEGIN CallerID BEGIN Billed Account Attributes 1111111 1111111 1111111 END B

随机推荐