在 MinGW 中尝试预期并发送预期脚本失败

在 MinGW 中尝试预期并发送预期脚本失败

我在用着明网我正在尝试编写一个将运行 git clone 的预期脚本。

我的脚本:

git clone ssh://[email protected]/myproject.git
expect "Enter passphrase for key..."
send "myPassword"
read -p "enter..."

运行后我得到:

Cloning into 'myproject'...
Enter passphrase for key...: |

现在程序正在等待密码,看起来似乎expect无法send正常工作。

这是我做过的一个非常基本的测试:

echo "hello"
expect "hello"
read -p "enter..."
send "\r"

以下是我得到的结果:

hello
bash: expect: command not found
enter...

我的脚本可能存在什么问题?

答案1

你没有expect安装在您的系统上。

如果错误是这样的:

bash: expect: command not found

为了确认,请尝试which如下操作:

which expect

如果您的系统上安装了该程序,它将返回 的完整文件路径expect。如果它不返回任何内容?则expect表示未安装。

我不太熟悉明网,但一般来说,expect它是一个命令行工具,几乎所有系统上都不会默认安装。它需要在需要使用它的任何系统上手动安装 - 通过包安装程序或源代码。

以下是当我认为问题出在语法和逻辑本身时我发布的答案的内容expect


你的expect脚本是这样的:

git clone ssh://[email protected]/myproject.git
expect "Enter passphrase for key..."
send "myPassword"
read -p "enter..."

您可能需要像这样点击Return/Enter末尾:send

send "myPassword\r"

或者您可以尝试格式化expect并且send使得send是另一个的明确条件,如下所示:

expect "Enter passphrase for key..." { send "myPassword\r" }

并且 — — 几乎错过了这一点 — — 但是你的主要命令需要像这样运行spawn

spawn "git clone ssh://[email protected]/myproject.git"

因此,通过上述两项更改,您的最终脚本将是这样的:

spawn "git clone ssh://[email protected]/myproject.git"
expect "Enter passphrase for key..." { send "myPassword\r" }
read -p "enter..."

但不能 100% 确定这read -p "enter..."是做什么用的;似乎没有用,也与脚本的其余部分不相关。因此,删除它并尝试执行以下操作:

spawn "git clone ssh://[email protected]/myproject.git"
expect "Enter passphrase for key..." { send "myPassword\r" }

综上所述,您应该使用 Git 设置 SSH 密钥。一直输入密码确实是一种繁琐且糟糕的 Git 使用方式,而这个脚本似乎试图让这一过程变得更容易?我强烈建议您设置 SSH 密钥,这样您就不必这样做,甚至不必将密码存储在 shell 脚本中。

相关内容