1
此前,我使用Tk/Expect和plink(PuTTY)来自动执行远程shell操作。但是,如果不同的shell有不同的提示,或者提示字符出现在非提示shell输出(!)中,Expect有时会失败。如何判断远程tty是否在等待输入?
我想知道是否有办法确定远程shell是否在等待输入通过plink或一些第三方库。如果有必要,我可以在套接字层编程。
此前,我使用Tk/Expect和plink(PuTTY)来自动执行远程shell操作。但是,如果不同的shell有不同的提示,或者提示字符出现在非提示shell输出(!)中,Expect有时会失败。如何判断远程tty是否在等待输入?
我想知道是否有办法确定远程shell是否在等待输入通过plink或一些第三方库。如果有必要,我可以在套接字层编程。
不,没有办法可靠地检测到你正在工作的级别的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");
谢谢您的回答。我将研究如何实现Net :: SSH :: Perl,而不是重新发明轮子,但这是我感兴趣的知识。 –
您可能不想尝试重新创建Net :: SSH :: Perl你自己 - 这是一个在Perl中完成SSH客户端的完整实现。不容易。 :) – duskwuff
将提示设置为新的UUID;在另一边偶然出现的可能性是可笑的微乎其微。 –