如何从包含测试语句的shell命令注册变量? (双方括号)

时间:2016-09-28 12:40:57

标签: ansible

我试图像这样注册变量:

- name: create database password
  shell: chdir=/var/www/website if [[ -n "$WEBSITE_DATABASE_PASSWORD" ]]; then echo "$WEBSITE_DATABASE_PASSWORD";else bundle exec rake secret;fi
  register: db_password

当我在shell中运行此命令时,它工作正常,但从ansible运行它会返回错误:

"stderr": "/bin/sh: 1: [[: not found"

我应该如何逃脱它?

1 个答案:

答案 0 :(得分:0)

sh是shell模块的默认shell。您需要执行以下操作:

- name: create database password
  shell: chdir=/var/www/website if [[ -n "$WEBSITE_DATABASE_PASSWORD" ]]; then echo "$WEBSITE_DATABASE_PASSWORD";else bundle exec rake secret;fi
  args:
    executable: /bin/bash
  register: db_password

然而正如康斯坦丁指出的那样,这不是处理你想要做的事情的理想方式。