如何判断远程tty是否在等待输入?

时间:2011-08-10 17:31:07

标签: linux shell ssh tk putty

以前,我使用Tk / Expect和plink(PuTTY)来自动执行远程shell操作。但是,如果不同的shell有不同的提示,或者在非提示shell输出中出现提示字符,则Expect有时会失败(!)

我想知道是否有办法通过plink或某些第三方库来判断远程shell是否期望输入。如果有必要,我可以在套接字层编程。

1 个答案:

答案 0 :(得分:2)

不,没有办法可靠地检测您正在工作的级别的shell提示符。一些替代选项可能是:

  • 始终运行命令,这些命令会在完成时打印一些可识别的输出 - 例如doSomething ; echo uniqueStringThatMeansThatWeAreDone - 然后搜索该字符串。
  • 让您的自动化脚本将提示设置为在登录时能够识别的内容。如果您不知道自己使用的是什么外壳,只需exec您想要的外壳。
  • 使用可以直接执行命令的SSH库,而不是尝试编写shell脚本。我不熟悉Tcl中的可用内容,但Perl有Net::SSH::Perl,它可以让你做以下事情:

    my $ssh = Net::SSH::Perl->new("remotehost");
    $ssh->login("user", "pass");
    my $output = $ssh->cmd("doSomething");