如何实现在执行cmd之前等待提示出现?

如何实现在执行cmd之前等待提示出现?

在我可以执行的某些主机上,我怎样才能等到出现 shell 提示符(例如在 bash 脚本中?),ssh user@host echo "test";然后它会登录,并在准备好时执行 echo“test” - 但看起来并没有在每个主机上工作。我想等待#$提示出现后再继续执行echo "test"- 我该怎么做?

当我这样做ssh user@host时,等待#并手动执行,echo "test"它会按您的预期工作。我如何将其放入脚本中?ssh user@host -t echo "test"也不行。

我特别尝试做类似的事情:ssh -o StrictHostKeyChecking=no -p 2222 user@host -t tail -f /var/log/MyFile.log即尾随主机的日志文件并在本地 shell 上显示结果而不是尾随日志文件,它只是让我看到提示:

No entry for terminal type "screen";
using dumb terminal settings.
#

-->请忽略提示root,这不是该线程的一部分。是的,它是从屏幕会话中启动的 - 从普通终端(xterm),它说No entry for terminal type "xterm";(例如)。

如果没有-t我得到FATAL: not a terminal,它就会把我扔回本地 shell。

答案1

作为最后的手段,您可以使用“expect”程序。

下面是一个如何将 Expect 与 ssh 结合使用的简单示例:https://www.journaldev.com/1405/expect-script-ssh-example-tutorial

答案2

我刚刚和最近实现这个的人聊过!他说这是因为出于安全原因(能够禁用生产版本的 root 访问权限),shell 通过其他一些登录二进制文件进行传输。解决方案是将额外二进制文件的路径更改/etc/passwd回 shell 二进制文件。

相关内容