Ansible シェルモジュールはコマンドスイッチを尊重しません。

Ansible シェルモジュールはコマンドスイッチを尊重しません。

だから、次のような任務を受けました。

- name: "Use echo."
  shell: echo -e "First Line\n " > "/tmp/{{ ansible_date_time.date }}_test.txt"
  delegate_to: localhost
  become: 'no'
  changed_when: 'false'
  run_once: 'yes'

生成されたファイルを表示すると、次の結果が表示されます。

-e First Line
<newline printed properly>

私が望むもの:

First Line
<newline printed properly>

私は基本的にさまざまな種類の引用を試しましたが、私が見逃しているものは何ですか?

ベストアンサー1

さまざまな歴史的理由により、バージョンごとにecho主張を異なって扱います。

$ bash -c 'echo -e hello'
hello
$ dash -c 'echo -e hello'
-e hello

/bin/shDashは、シェルにエスケープされているほとんどのプログラムが使用可能であるDebianとUbuntuのシェルです。それはおそらくあなたがここで経験している問題でしょう。

を使用すると、非互換性を防ぐことができますprintf。これは標準的なツールであり、非互換性が少ない(常に処理\nなど)。

shell: printf "First Line\n " > "/tmp/{{ ansible_date_time.date }}_test.txt"

引用符を使用する場合、オプションはユーティリティ自体で処理され、引用符は完全にシェル構成であるため、Yesを使用するか、を使用するecho '-e'と、それ自体でまったく同じ内容をecho -e表示できます。echo

また見なさい:

おすすめ記事