Ansible shell 模块的行为不同于 Linux shell
Ansible shell module behaves differently than the Linux shell
我希望在单行中获取 Linux 的多个命令的输出,如下所示。如您所见,ls
和 cksum
的输出打印在一行中。
# 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 命令以在一行中获得 ls
和 cksum
的输出吗?
注意:您也可以在您的系统上快速测试它。
您 运行 为错误的命令设置换行符->制表符,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"
我希望在单行中获取 Linux 的多个命令的输出,如下所示。如您所见,ls
和 cksum
的输出打印在一行中。
# 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 命令以在一行中获得 ls
和 cksum
的输出吗?
注意:您也可以在您的系统上快速测试它。
您 运行 为错误的命令设置换行符->制表符,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"