如何通过Autohotkey在Git Bash中读取命令输出

3
我正在尝试通过Autohotkey向Git Bash终端发送命令,但无法找到一种方法来读取其输出。有简单的方法吗?我正在发送以下内容:

Run,C:\Users\Unknown\AppData\Local\Programs\Git\git-bash.exe
sleep,2000

Send cd /c/Users/Unknown/Desktop/git/fw{Enter}

sleep,1000

Send git log --pretty=format:'`%h' -n 1{Enter}

答案是终端上显示的提交编号。

如何读取它?

谢谢


尝试使用WinGetText - user3419297
1个回答

2

捕获输出

要捕获命令的输出,您可以使用以下任一RunWaitOne()函数之一。

选项1:不使用临时文件,无法隐藏命令窗口。(来源

; From https://www.autohotkey.com/docs/commands/Run.htm#Examples
RunWaitOne(command) {
  shell := ComObjCreate("WScript.Shell")
  exec := shell.Exec(ComSpec " /C """ command """") ; change: added '"' around command
  return exec.StdOut.ReadAll()
}

选项2:使用临时文件且命令窗口被隐藏。(在WTFPL下发布)

RunWaitOne(command) {
  tmpFile := A_Temp . "\" . A_ScriptName . "_RunWaitOne.tmp"
  RunWait, % ComSpec . " /c """ . command . " > """ . tmpFile . """""",, Hide
  FileRead, result, %tmpFile%
  FileDelete, %tmpFile%
  return result
}

工作示例

我个人不喜欢在路径中进行硬编码,因此以下答案设置为执行以下步骤:

  1. 查找系统PATH环境变量中的Git安装并将其存储为GIT_BIN_DIR
  2. 如果尚未找到安装,则在默认安装目录中查找并将其存储为GIT_BIN_DIR
  3. 如果找不到Git,则显示错误消息并退出。
  4. 排队调用命令。
  5. 执行命令并将结果存储在变量result中。
  6. 显示结果

代码

代码根据WTFPL发布。

; STEP 1: Try to find Git on PATH
EnvGet, E_PATH, PATH
GIT_BIN_DIR := ""
for i, path in StrSplit(E_PATH, ";")
{
  if (RegExMatch(path, "i)Git\\cmd$")) {
    SplitPath, path, , parent
    GIT_BIN_DIR := parent . "\bin"
    break
  }
}

; STEP 2: Fallback to default install directories.
if (GIT_BIN_DIR == "") {
  allUsersPath := A_ProgramFiles . "\Git\bin"
  currentUserPath := A_AppData . "\Programs\Git\bin"
  if (InStr(FileExist(currentUserPath), "D"))
    GIT_BIN_DIR := currentUserPath
  else if (InStr(FileExist(allUsersPath), "D"))
    GIT_BIN_DIR := allUsersPath
}

; STEP 3: Show error Git couldn't be found.
if (GIT_BIN_DIR == "") {
  MsgBox 0x1010,, Could not find Git's 'bin' directory
  ExitApp
}

; STEP 4 - Queue any commands.
; commands becomes "line1 & line2 & ..." thanks to the Join continuation section
commands := "
(Join`s&`s
cd /c/Users/Unknown/Desktop/git/fw
git log --pretty=format:'`%h' -n 1
)"

; STEP 5 - Execute the commands (Uses "Git\bin\sh.exe" so we can capture output)
result := RunWaitOne("""" . GIT_BIN_DIR . "\sh.exe"" --login -i -c """ . commands . """")

; STEP 6 - Show the result
MsgBox 0x1040,, % result

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接