从 Ansible 运行 shell 命令

从 Ansible 运行 shell 命令

我有一个 shell 脚本,它只更改目录(这里给出了目录路径)。

外壳文件

#!/bin/bash
p="dir/file/create"
cd "$p"
exec bash

Ansible 手册

---
 - hosts: localhost
   gather_facts: true
   become: true
   become_user: oracle
   become_flags: 'content-ansible'
   tasks:
   - name: changing dir now..
     command: sh /dir/file/create/vars.sh

我想运行一个 shell 脚本来更改 ANSIBLE 中的目录路径,并在目录中运行后续的 shell 文件(#2)(再次是 shell 脚本)。

Ansible 剧本已完成,但我始终无法进入目录并执行 shell 脚本(#2)。

答案1

你为什么不使用chdir范围?

chdir: 运行命令之前先 cd 进入该目录

来自文档:

- name: Change the working directory to somedir/ before executing the command.
  command: somescript.sh
  args:
    chdir: somedir/

答案2

在您的脚本中,您应该输入完整的路径:

#!/bin/bash
p="/dir/file/create"
cd "$p" 

不要在 COMMAND 模块前面使用 sh:

   - name: changing dir now..
     command: /dir/file/create/vars.sh  

但对于您的问题,“shell”模块比“命令”模块更好。

答案3

我尝试了这个选项并且对我来说似乎很好:

pre_tasks:
 - include_vars: vars.yml
tasks:
 - name: Do task...
   shell: cd "{{v_dir}}" && sh shell2.sh

相关内容