shell 无法使用Ansible中的参数执行sh脚本

rks48beu  于 2022-11-16  发布在  Shell
关注(0)|答案(3)|浏览(148)

我正在尝试启动一个安装脚本,它已经存在于远程主机上的ansible剧本。还有一些参数需要。

- hosts: myhost
  become: yes
  gather_facts: no
  tasks:
    - name: Running an installation script
      command: sh /home/user/install.sh --param1 'param1' --param2 'param2' --param3 'param3' --param4 'param4'

但它不起作用。当我尝试启动剧本时,我得到以下输出:

fatal: [myhost]: FAILED! => {"changed": true, "cmd": ["sh", "/home/user/install.sh", "--param1", "param1", "----param1", "--param1", "--param3", "param3", "--param4", "param4"], "delta": "0:00:00.002254", "end": "2019-04-17 11:27:13.063837", "msg": "non-zero return code", "rc": 2, "start": "2019-04-17 11:27:13.061583", "stderr": "/home/user/install.sh: 4: set: Illegal option -o pipefail", "stderr_lines": ["/home/user/install.sh: 4: set: Illegal option -o pipefail"], "stdout": "", "stdout_lines": []}
lyr7nygr

lyr7nygr1#

脚本失败,并显示以下消息:
“标准错误_行”:["/home/user/install.sh:4:设置:非法选项-o pipefail”]
尝试从字符串读取命令。请参阅sh

command: sh -c "/home/user/install.sh --param1 'param1' ..."

从男人那里问
-c选项导致命令从字符串操作数而不是标准输入中读取。请记住,此选项只接受单个字符串作为其参数,因此多字字符串必须用引号括起来。

eagi6jfj

eagi6jfj2#

正如文档所建议的(https://docs.ansible.com/ansible/latest/modules/command_module.html),您可以使用如下命令:

- name: Running an installation script
      command: /home/user/install.sh --param1 'param1' --param2 'param2' --param3 'param3' --param4 'param4'

如果您的脚本中有一个shebang,这应该没有问题。
另一个解决方案是使用脚本(https://docs.ansible.com/ansible/latest/modules/script_module.html),如下所示:

- name: Running an installation script
  script: /home/user/install.sh --param1 param1 --param2 param2 --param3 param3 --param4 param4

让我听听有没有帮助

gopyfrb3

gopyfrb33#

您可以使用shell模块而不是command模块将参数传递给linux命令,特别是脚本,因为它具有脚本模块。

  • name:仅当远程节点上存在file.txt时才运行脚本脚本:/some/local/remove_file.sh --某个参数1234个参数:删除:/the/已删除/文件. txt

和用于linux命令
例如: shell :“curl --socks 5本地主机:9000 http://www.ansible.com
有关详细信息,请参阅
https://docs.ansible.com/ansible/latest/modules/shell_module.html

相关问题