Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Ansible在执行.run文件时无法传递参数_Linux_Ansible_Parameter Passing - Fatal编程技术网

Linux Ansible在执行.run文件时无法传递参数

Linux Ansible在执行.run文件时无法传递参数,linux,ansible,parameter-passing,Linux,Ansible,Parameter Passing,我正在尝试使用Ansible在剧本中使用以下任务安装.run文件(使用Makeself 2.1.5创建): - name: Install Program command: /home/user/folder/program.run -- /S /D=/home/user/folder/destination/ 这里,/S是运行静默安装的开关,参数/D设置安装的目标。在控制台中成功运行此命令 Ansible声称无误运行任务: changed: [127.0.0.1] => {

我正在尝试使用Ansible在剧本中使用以下任务安装.run文件(使用Makeself 2.1.5创建):

- name: Install Program
  command: /home/user/folder/program.run -- /S /D=/home/user/folder/destination/
这里,
/S
是运行静默安装的开关,参数
/D
设置安装的目标。在控制台中成功运行此命令

Ansible声称无误运行任务:

changed: [127.0.0.1] => {
    "changed": true, 
    "cmd": [
        "/home/user/folder/program.run", 
        "--", 
        "/S", 
        "/D=/home/user/folder/destination/"
    ], 
    "delta": "0:00:00.065261", 
    "end": "2017-01-06 09:08:43.114265", 
    "invocation": {
        "module_args": {
            "_raw_params": "/home/user/folder/program.run -- /S /D=/home/user/folder/destination/", 
            "_uses_shell": false, 
            "chdir": null, 
            "creates": null, 
            "executable": null, 
            "removes": null, 
            "warn": true
        }, 
        "module_name": "command"
    }, 
    "rc": 0, 
    "start": "2017-01-06 09:08:43.049004", 
    "stderr": "", 
    "stdout": "", 
    "stdout_lines": [], 
    "warnings" : []
因此,不知何故,附加参数导致执行失败,而Ansible没有注意到。我尝试过使用
shell
命令和各种引用我的命令的方式,但都没有用

如果我没有将参数传递给
.run
文件,即使用
命令:/home/user/folder/program.run
,则会打开一个安装提示,要求用户输入,这与Ansible的目的不符

有人能解决这个问题吗?一个可能的解决方法可能是使用
expect
模块,但我更希望能够使用命令行参数,因为这不是我想要安装的唯一文件

我在Ubuntu 16.04.1 LTS上使用Ansible 2.2.0.0

编辑:
按照techraf的建议,我使用
shell
模块找到了一个简单的解决方案。使用
shell:konsole-e/home/user/folder/program.run/S/D=/home/user/folder/destination/
导致安装正确完成。也可以将命令放入脚本文件中,并使用
脚本
模块运行它。

尝试使用
shell
模块,而不是
命令

- name: Install Program
  shell: /home/user/folder/program.run -- /S /D=/home/user/folder/destination/
您在命令执行中使用了
--
,这实际上阻止了shell解析后面的参数。它是一个内置的shell,不是命令的参数

现在无法测试它(坦白地说,没有你运行的真正程序是不可能的),但我打赌它应该可以工作



如果上述方法不起作用,您可能必须将这一行放入脚本中,并使用
脚本
模块运行它。

您的“各种引用方式”是否包含
\/S
\\/S
\\\/S
?当然没有
--
。标题是错误的,Ansible实际上成功地传递了参数,尽管
--
应该可以阻止它。@techraf:你几乎解决了我的问题。当我卸下
--
时,安装例程已正确启动。我误解了安装程序,认为
--
是向嵌入式脚本传递参数所必需的。还有一个问题,安装程序打开一个窗口并要求“按return”将其关闭。但这是安装程序的问题,而不是Ansible的问题。使用
shell
模块并不能解决问题。它产生相同的输出,除了
“\u uses_shell”:true
,但不安装程序。如果它不起作用,您可能必须编写脚本并使用
脚本运行它。当我删除
--
时,安装程序会正确启动,但会打开一个窗口,并在安装结束时要求“按return”。我将尝试编写一个脚本,看看这是否解决了问题。这可能就是为什么指示您按照我的建议使用
--
编写脚本的原因。我编写了一个脚本,但安装程序仍然要求“按回车键”,所以我想我必须找到另一种方法。但是感谢您的帮助,删除
--
是朝着正确方向迈出的重要一步。