首页 > 解决方案 > 在 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\binwheregit-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/"

标签: ansible

解决方案


请注意,我没有可以尝试此操作的 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/'

推荐阅读