我在用着明网我正在尝试编写一个将运行 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 脚本中。