【问题标题】:Ansible shell module behaves differently than the Linux shellAnsible shell 模块的行为与 Linux shell 不同
【发布时间】:2019-08-27 21:05:56
【问题描述】:

我希望在一行中获取 Linux 的多个命令的输出,如下所示。如您所见,lscksum 的输出打印在一行中。

# myvar=`ls -ltr test.yml; cksum<test.yml | tr '\n' '\t'`
# echo $myvar

输出: -rw-r--r--。 1根根298 May 3 04:46 test.yml 3415682946 298

现在,我希望在 Ansible 中做同样的事情,所以下面是 ansible 命令:

# ansible localhost -m shell -a "ls -ltr test.yml; cksum<test.yml | tr '\n' '\t'"

但是,您可以看到 cksum 的输出打印在第二行而不是第一行。

输出: 本地主机 |更改 | rc=0 >>

-rw-r--r--。 1根根298 May 3 04:46 test.yml

3415682946 298

使用命令模块会报错。

您能否帮助我了解如何调整 ansible 命令以在一行中同时获得 lscksum 的输出?

注意:您也可以在您的系统上快速对此进行测试。

【问题讨论】:

    标签: shell ansible formatting command output


    【解决方案1】:

    您正在为错误的命令翻译 newline->tab,而 echo 实际上会扭曲您的测试结果。你想要的命令是:

    ansible localhost -m shell -a "ls -ltr test.yml | tr '\n' '\t'; cksum<test.yml"
    

    如果您运行ls -ltr test.yml; cksum&lt;test.yml | tr '\n' '\t' 而不将其分配给变量,您将看到输出分成两行。 echo 实际上是在剥离额外的空白。要回显您的真实结果(包括空格),请将变量括在双引号中:

    echo "$myvar"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多