0

如何使这里的 echo 语句正确?我使用 Ansibledebug模块时能够正确获取值,但在 shell 模块中不能。

cat /data/info.txt
a:8080,b:8081,c:8082
cat /data/num
0
 - hosts: dev
   remote_user: root
   gather_facts: false
   tasks:
     - name: get dir path and port info
       shell: cat /data/info.txt
       register: info

     - name: get the last num
       shell: cat /data/num
       register: num

     - name: test
       shell: echo {{ info.stdout.split(',')[{{ num.stdout }}].split(':')[0] }} >>/tmp/test.txt
4

1 回答 1

0

一旦你用 . 打开 Jinja2 表达式{{,你应该使用裸变量,直到它用 . 终止}}。引用常见问题解答

另一个规则是“胡须不堆叠”。我们经常看到这样的:

{{ somevar_{{other_var}} }} 

以上不起作用


您可能正在寻找的(因为您仍然没有包括预期的结果)是:

shell: echo {{ info.stdout.split(',')[ num.stdout|int ].split(':')[0] }} >>/tmp/test.txt

除了不堆叠胡须之外,您还需要注意类型并将第二个值(从 检索/data/num)转换为整数。

于 2017-09-12T06:23:17.520 回答