ansible - 在 Ansible 中,如何在 git-bash shell 中运行 shell 脚本?
问题描述
Ansible 2.11.0
我有一个 shell 脚本,它接受我想在 Windows 主机上运行的 2 个参数,但想在git-bash.exe
. 这个我试过了
- name: Run test script
win_shell: "cmd.exe /c git-bash.exe /c/temp/test_shell.sh db_name /c/temp/db_backup/"
并得到
TASK [qa-db-backup : Run test script] ******************************************
fatal: [10.227.xx.xx]: FAILED! => {"changed": true, "cmd": "cmd.exe /c git-bash.exe /c/temp/test_shell.sh pacs_live /c/temp/db_backup/", "delta": "0:00:00.328128", "end": "2021-06-15 02:01:14.466517", "msg": "non-zero return code", "rc": 1, "start": "2021-06-15 02:01:14.138388", "stderr": "'git-bash.exe' is not recognized as an internal or external command,\r\noperable program or batch file.", "stderr_lines": ["'git-bash.exe' is not recognized as an internal or external command,", "operable program or batch file."], "stdout": "", "stdout_lines": []}
这是因为C:\...\Git\bin
wheregit-bash.exe
不在路径中吗?不过,我也不太确定语法。
有什么线索吗?
更新
这是我的简单测试脚本顺便说一句。
#!/usr/bin/env bash
if [ "$#" -ne 2 ]; then
echo "Usage: test_shell.sh <db_name> <backup_path>"
exit 1
fi
DB_NAME=$1
DB_PATH=$2
# Echo the passed-in parms to a file
echo "DB name: $DB_NAME" > /c/temp/$DB_NAME.txt
echo "DB path: $DB_PATH" >> /c/temp/$DB_PATH.txt
if [ $? != 0 ]; then
touch /c/temp/fail.txt
fi
我将我的任务修改为此,并没有收到错误,但我没有看到在通过/失败场景中创建的文件。所以我仍然不确定语法?
- name: Run test script
win_shell: "cmd.exe /c 'c:\\Program Files\\Git\\git-bash.exe' /c/temp/test_shell.sh db_name /c/temp/db_backup/"
解决方案
请注意,我没有可以尝试此操作的 Windows 机器,所以这只是“尽力而为”
据我所知,您的问题是因为您试图win_shell
通过“手动”调用不正确引用的cmd.exe /c
业务来重新创建行为,最终以cmd.exe /c "cmd.exe /c whatever"
; 拨打 ansible 冗长-vv
可以确认或否认该模式
此外,除非您有 shell 重定向需要,否则win_shell
文档说要使用win_command:
,正如您的任务所写的那样。
# you may save yourself a lot of heartache my ensuring that path exists first
# https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_stat_module.html
- name: see if git-bash exists
win_stat:
path: 'c:\Program Files\Git\git-bash.exe'
register: git_bash_st
- name: ensure that git-bash exists
assert:
that:
- git_bash_st.stat.exists
# Modified afer adding "C:\Program Files\Git" to the system path
- win_command: 'git-bash.exe /c/temp/test_shell.sh db_name /c/temp/db_backup/'
推荐阅读
- reactjs - React-Bootstrap 和 Bootstrap 未使用 NPM 安装
- c++ - 使用 Clang++ 编译器从 Visual Studio Code 运行 C++ 文件时,如何关闭 dSYM 文件?
- python - AttributeError:模块“PIL.Image”没有属性“load_img”
- proxy - 出站规则问题
- java - JUnit-Testing 自定义验证注解 Java
- amazon-web-services - 将资源 ARN 转移到 Lambda
- ios - ios NEHotspotNetwork - 应用程序在链接过程中崩溃(Xcode)
- javascript - 无法使用 vanilla JS 在我的 PHP 服务器上接收 POST 方法
- spring-boot - 我是spring新手,通过spring-data-jpa连接springboot和mysql-db时遇到这个问题
- python - plotly库python中的多线条形图