我正在使用Ansible,我想使用我的Ansible playbook在我的Ansible角色中使用以下代码复制或移动文件。
- name: Backing up existing ~/.zshrc
shell: if [ -f ~/.zshrc ]; then cp ~/.zshrc{,.orig}; fi
become: true
become_user: root
when: installation|success
然而,当我运行它时,我收到此错误,我做错了什么?
fatal: [localhost]: FAILED! =>
{
"changed":true,
"cmd":"if [ -f ~/.zshrc ]; then cp ~/.zshrc{,.orig}; fi",
"delta":"0:00:00.002640",
"end":"2017-04-11 12:32:35.886640",
"failed":true,
"rc":1,
"start":"2017-04-11 12:32:35.884000",
"stderr":"cp: missing destination file operand after '/root/.zshrc{,.orig}'\nTry 'cp --help' for more information.",
"stderr_lines":[
"cp: missing destination file operand after '/root/.zshrc{,.orig}'",
"Try 'cp --help' for more information."
],
"stdout":"",
"stdout_lines":[
]
}
答案 0 :(得分:1)
并非所有的shell都支持大括号扩展,你可以在错误消息ssh <the very same computer> which python
中看到它按字面意思理解。
将以下参数添加到cp: missing destination file operand after '/root/.zshrc{,.orig}'
模块中以在Bash中运行命令(当然提供Bash安装在目标上):
shell
但总的来说,这不是Ansible中最优雅的方式。令人不安的是你为什么要在Ansible剧本中完成这样的任务呢?如果要在某个其他任务(应该修改executable: /bin/bash
文件)之前进行备份,则修改文件的大多数(如果不是全部)Ansible模块提供.zshrc
开关以自动保存以前的版本