在Ansible中,shell
模块是一个非常常用的模块,它允许你在目标主机上执行shell命令。以下是一些常用的shell
模块的参数和示例:
参数说明
chdir
: 在执行命令前切换到指定目录。cmd
: 要运行的命令及其参数。creates
: 如果指定的文件已存在,则不会运行此步骤。executable
: 更改用于执行命令的shell,需要指定到可执行文件的绝对路径。free_form
: 使用自由形式的命令字符串运行命令。removes
: 如果指定的文件不存在,则不会运行此步骤。stdin
: 设置命令的stdin为指定值。warn
: 是否启用任务警告。
示例
# 执行shell命令,并将标准输出重定向到远程文件
- name: Execute the command in remote shell; stdout goes to the specified file on the remote.
shell: somescript.sh >> somelog.txt
# 更改工作目录后执行命令
- name: Change the working directory to somedir/ before executing the command.
shell: somescript.sh >> somelog.txt
args:
chdir: somedir/
# 使用'cmd'参数代替自由形式格式
- name: This command will change the working directory to somedir/.
shell:
cmd: ls -l | grep log
chdir: somedir/
# 运行使用非posix shell特性的命令
- name: Run a command that uses non-posix shell-isms.
shell: cat < /tmp/*txt
args:
executable: /bin/bash
# 使用模板化变量运行命令
- name: Run a command using a templated variable.
shell: cat {{ myfile|quote }}
# 运行其他可执行程序来执行操作
- name: Run expect to wait for a successful PXE boot via out-of-band CIMC.
shell: |
set timeout 300
spawn ssh admin@{{ cimc_host }}
# 更多expect脚本...
args:
executable: /usr/bin/expect
这些示例展示了如何使用shell
模块来执行各种命令,包括如何使用参数来改变工作目录、指定shell解释器、重定向输出、使用变量等。shell
模块因其灵活性而非常受欢迎,但也要注意避免潜在的注入风险和非幂等性问题。