Ansible shell 模块的行为不同于 Linux shell

Ansible shell module behaves differently than the Linux shell

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

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

Output: -rw-r--r--. 1 root root 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 的输出打印在第二行而不是一行。

Output: localhost | CHANGED | rc=0 >>

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

3415682946 298

使用命令模块抛出错误。

你能帮我理解如何调整 ansible 命令以在一行中获得 lscksum 的输出吗?

注意:您也可以在您的系统上快速测试它。

您 运行 为错误的命令设置换行符->制表符,echo 实际上歪曲了您的测试结果。你要的命令是:

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

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

echo "$myvar"