【发布时间】:2017-01-24 19:32:21
【问题描述】:
我在创建脚本时遇到了问题。它将一些数据复制到另一台服务器,然后使用 ssh heredoc 连接到服务器,它会启动位于 heredoc 内第二台服务器上的第二个脚本。
我遇到的问题是,如果您通过 bash 脚本执行第二个脚本(而不是手动启动它),那么它将跳过一个关键步骤,第二个脚本要求您点击 [enter] 然后输入密码以生成一些文件。
我无权访问第二个脚本,因此无法更改任何内容。我尝试了所有类型的回声 | ./script2.sh 组合、printf、heredoc,没有任何效果。编辑:expect 在第二台服务器上不可用。
我正在做的例子:
scp -r $dir xxxx@xxx.xx.x.xx:/as/df/qwerty/
ssh xxxx@xxx.xx.x.xx "bash -s" << EOF
# install
/as/df/qwerty/${choice}/./install_${choice}
EOF
【问题讨论】:
-
听起来第二个脚本需要一个终端。也许您可以使用“expect”程序来解决这个问题,该程序是为编写交互式应用程序而创建的。
-
我希望我可以使用 expect,但第二台服务器没有它,我也无权在该服务器上安装它
-
如果你有足够的权限通过你选择的解释器运行它,你就有足够的权限来修改它的运行方式——你可能只需要一点点...... 创意。例如,如果它正在运行
[ -t 0 ]以检查 stdin 是否为 TTY,您可以将脚本输入到覆盖[的 shell 中,以便在$1是-t和$2是 @987654329 时执行您自己的逻辑@. -
@CharlesDuffy 您如何建议我将 [enter] 击键发送到在 ssh heredoc 中启动的第二个脚本?您的回复对我来说似乎是一门外语,因为我是 bash 新手,抱歉。
-
基本上,我不建议你这样做。我建议您阅读第二个脚本的源代码,弄清楚它在当前尝试从 TTY 读取的位置周围做了什么,并欺骗该逻辑做一些更有意义的事情(例如,甚至无条件地从标准输入读取在非 TTY 的情况下)。这个脚本是公开的,所以我可以查看它并提供更具体的建议吗?