首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过运行shell脚本设置环境后执行命令?

如何通过运行shell脚本设置环境后执行命令?
EN

Stack Overflow用户
提问于 2019-04-10 18:11:03
回答 1查看 324关注 0票数 0

我正在使用ansible连接到一台远程Linux机器。我想执行一个应用程序特定的命令,这将给我的应用程序version.But在此之前,必须执行一个外壳脚本,这将设置上述命令的执行环境。

目前,每个任务似乎都在单独的shell中执行

在执行/ds1/home/has9e/CS9/psconfig.sh之后,我想执行psadmin -v

代码语言:javascript
复制
- command: "{{ item }}"
  args:
    chdir: "/ds1/home/has9e/CS9/"
  with_items:
   - "./psconfig.sh"
   - "psadmin -v"
  register:  ptversion
  ignore_errors: true

错误是:

代码语言:javascript
复制
failed: [slc13rog] (item=./psconfig.sh) => {
    "changed": false,
    "cmd": "./psconfig.sh",
    "invocation": {
        "module_args": {
            "_raw_params": "./psconfig.sh",
            "_uses_shell": false,
            "argv": null,
            "chdir": "/ds1/home/has9e/CS9/",
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "warn": true
        }
    },
    "item": "./psconfig.sh",
    "msg": "[Errno 8] Exec format error",
    "rc": 8
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-10 19:00:31

command模块(和shell模块)在子进程中执行命令。这意味着,如果运行设置环境变量的shell脚本,则对任何后续命令都没有影响:变量是在子进程中设置的,子进程随后退出。

如果希望在shell脚本中设置的环境变量对后续命令生效,则需要使它们都成为同一shell脚本的一部分。例如:

代码语言:javascript
复制
- shell: |
    ./psconfig.sh
    psadmin -v
  args:
    chdir: "/ds1/home/has9e/CS9/"
  register:  ptversion
  ignore_errors: true       

在这里,我们使用YAML |操作符向shell模块传递一个文本块,但我们也可以改为这样写:

代码语言:javascript
复制
- shell: "./psconfig.sh;psadmin -v"
  args:
    chdir: "/ds1/home/has9e/CS9/"
  register:  ptversion
  ignore_errors: true       

这两个替代方案在功能上是相同的。在这两种情况下,我们都将psconfig.sh脚本放入shell环境,然后在同一shell中运行psadmin任务

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55609962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档