Bash 可复制回显到文件

Bash 可复制回显到文件,bash,ansible,Bash,Ansible,我需要帮助来理解这个问题: 所以我使用ansible,基本上我有一个包含3V变量的vault文件,在我的角色中,我有一个部分,应该将vault的每个变量复制到3个不同的文件中: - name: copy needed certificate shell: echo {{ client_kafka_rsyslog_cer }} >> {{ dest_cert_file }} shell: echo {{ client_kafka_rsyslog_key }} >>

我需要帮助来理解这个问题: 所以我使用ansible,基本上我有一个包含3V变量的vault文件,在我的角色中,我有一个部分,应该将vault的每个变量复制到3个不同的文件中:

- name: copy needed certificate
  shell: echo {{ client_kafka_rsyslog_cer }} >> {{ dest_cert_file }}
  shell: echo {{ client_kafka_rsyslog_key }} >> {{ dest_key_file }}
  shell: echo {{ client_kafka_rsyslog_sdr_authority_cer }} >> {{ dest_ca_file }}
所以client_kafka_*是vault文件中的变量,我应该输出3个文件,每个文件都包含变量的数据,但我只得到一个文件,它总是最后一个。例如,我得到dest_ca_文件,它包含正确的值,但其他两个文件根本没有创建。如果我这样评论最后一行:

- name: copy needed certificate
  shell: echo {{ client_kafka_rsyslog_cer }} >> {{ dest_cert_file }}
  shell: echo {{ client_kafka_rsyslog_key }} >> {{ dest_key_file }}
  #shell: echo {{ client_kafka_rsyslog_sdr_authority_cer }} >> {{ dest_ca_file }}
我得到了dest_key_文件及其正确的值,有人能解释一下为什么它只是应用的最后一个echo吗?我怎样才能纠正它呢


谢谢你的帮助。

我在这里找到了答案:

所以我应该写的是:

- name: copy needed certificate
  shell: |
    echo {{ client_kafka_rsyslog_cer }} >> {{ dest_cert_file }}
    echo {{ client_kafka_rsyslog_key }} >> {{ dest_key_file }}
    echo {{ client_kafka_rsyslog_sdr_authority_cer }} >> {{ dest_ca_file }}

但是仍然不明白为什么不能将多个shell模块放在同一个名称下。

您应该在一个循环中执行,您试图在单个任务中执行3次模块shell,另一个选项是使用管道操作数在多行shell上执行:

- name: copy needed certificate
  shell: |
    echo {{ client_kafka_rsyslog_cer }} >> {{ dest_cert_file }}
    echo {{ client_kafka_rsyslog_key }} >> {{ dest_key_file }}
    echo {{ client_kafka_rsyslog_sdr_authority_cer }} >> {{ dest_ca_file }}

您不能这样做,因为YAML不是一种编程语言。它最初是一种标记语言(另一种标记语言)。因此,每个连续的
shell:
实际上都会覆盖上一个。使用带有属性的
copy
模块。是的^?对我来说,复制需要src:(一个文件)和dest:(另一个文件),但我想要的是复制一个文件的内容