如何在使用 Plink 执行的 bash 文件中接受用户输入?

How to accept user input in bash file that is executed using Plink?

我有一个简单的 bash 脚本:

echo "Hello!"

read varname

echo "you entered " $varname

因此它输出 "Hello!" 然后接受用户输入并输出输入的文本。

脚本可以使用PuTTY成功执行。

我也可以 运行 通过 Windows cmd 使用 Plink 的脚本。我连接到主机:

plink.exe -batch -i C:\path\to\key.ppk user@host

然后我更改目录和 运行 脚本:

cd mydir

bash myscript.sh

脚本按要求工作:打印 "Hello!" 然后请求输入并打印输入。

但是,如果我 运行 脚本与 Plink 连接具有相同的字符串:

plink.exe -batch -i C:\path\to\key.ppk user@host bash ./mydir/myscript.sh

我遇到以下错误:我看到 "Hello!" 输出并且光标在下一行闪烁。但是我不能在那里输入任何字符。控制台根本不会对任何键做出反应,甚至不会对 Enter 做出反应。继续的唯一方法是按 Ctrl+C 关闭连接。

那么,如果使用单行执行脚本,如何解决这个问题并使脚本接受使用 cmd + Plink 的输入?

当您在 Plink command-line 上指定命令时,它会在 non-interactive 会话中执行命令(没有终端仿真)。

使用-t switch强制使用交互式会话(终端仿真):

plink.exe -batch -t -i C:\path\to\key.ppk user@host bash ./mydir/myscript.sh