Powershell 问题 - 在 Git Bash 中执行命令

Powershell issue - executing command in Git Bash

我正在尝试编写一个脚本,它是一个更大的自动化脚本的一部分,该脚本在本地开发机器上配置 GitHub ssh 密钥。

这是我尝试 运行 的行,但由于某些原因 'eval $(ssh-agent -s)' 失败,因为它出错并输出此消息。

'eval' is not recognized as an internal or external command,
operable program or batch file.
cmd.exe /c "ssh-keygen -t rsa -b 4096 -C "$githubEmailAddress" && eval $(ssh-agent -s) && ssh-add ~/.ssh/id_rsa && clip < ~/.ssh/id_rsa.pub"

我环顾四周,我没有运气来解决这个问题。我不知道如何启动 Git Bash 终端,命令从 ps1 脚本运行。

经过大量试验和错误后,您可以从 powershell 打开 git bash 提示的方法是找到 bin\bash.exe 文件,该文件通常位于名为 Git 在 Program Files 文件夹中。

从 ps1 文件的位置,您可能需要修改 ....\ 部分,但下面的脚本允许您打开 bash 提示执行一堆调用,然后退出提示

cmd.exe /c 'cd "..\..\Program Files\Git\bin" && bash.exe -c "ssh-keygen -t rsa -b 4096 -C "blah@gmail.com" && eval $(ssh-agent -s) && ssh-add ~/.ssh/id_rsa && clip < ~/.ssh/id_rsa.pub && exit"' 

您应该考虑为 bash.exe 创建一个别名,这样它只会在脚本中被引用一次,并且在您将来需要时更容易更改。

然后您可以创建 SSH 密钥,如下所示:

New-Alias -Name gitBash -Value "$Env:ProgramFiles\Git\bin\bash.exe

gitBash -c "ssh-keygen -t rsa -b 4096 -C "blah@gmail.com" && eval $(ssh-agent -s) && ssh-add ~/.ssh/id_rsa && clip < ~/.ssh/id_rsa.pub && exit"

您也不必进行尽可能多的编码,因为密钥生成参数不再需要用字符串定界符包装。

您还可以避免像使用 cd 命令那样手动管理当前目录。

另请注意使用 $Env:ProgramFiles 获取程序文件目录的基本路径,它的配置与“C:\Program Files”不同并不常见,但它可以避免这样路径名中的空格就会出现问题。