Linux unixshell-Korn脚本

Linux unixshell-Korn脚本,linux,shell,unix,automation,scripting,Linux,Shell,Unix,Automation,Scripting,这就是任务 接受多个文本输入并输出一些数据的UNIX应用程序。然后对数据进行解析并[完成任务]。该程序是一个控制台应用程序,我猜它正在使用NCurses,但它基本上是一个控制台应用程序 我无法控制UNIX box,因此只能使用它安装的内容。它有可兰经的外壳。没有Python,没有expect等等,所以答案必须是Korn shell 基本要点是使用SSH连接到UNIX服务器,每4分钟运行一次应用程序,并获取其最终输出 我最初尝试在Paramiko的客户机上使用Python实现这一点,它做了一些工作

这就是任务

接受多个文本输入并输出一些数据的UNIX应用程序。然后对数据进行解析并[完成任务]。该程序是一个控制台应用程序,我猜它正在使用NCurses,但它基本上是一个控制台应用程序

我无法控制UNIX box,因此只能使用它安装的内容。它有可兰经的外壳。没有Python,没有expect等等,所以答案必须是Korn shell

基本要点是使用SSH连接到UNIX服务器,每4分钟运行一次应用程序,并获取其最终输出

我最初尝试在Paramiko的客户机上使用Python实现这一点,它做了一些工作,但老实说,它非常粗糙

我决定在UNIX服务器上运行一个Korn脚本,该脚本在输出完成时简单地创建一个文件。我在这里忽略解析文件,因为这很简单。我的总体想法是打开SSH、连接、运行Korn脚本、抓取文件以及做任何事情

现在让我们假设UNIX应用程序需要:

发送用户名\n

发送密码\n

发送一些搜索文本\n

发送一些其他文本\n

按任意键退出\n

现在我把它放在一起,在一个完美的世界里,它确实起作用了

#!/usr/bin/ksh

./SSH-Test << TextForInput > the-data-i-want.txt
the-username
the-password
some-input
some-other-input 
some-key-press

exit 0
#/usr/bin/ksh
./SSH测试-data-i-want.txt
用户名
密码
一些输入
其他一些输入
一些按键
出口0
我的问题是,如果一切正常,这一切都是好的。(也许有更好的方法)。如果说密码改变了,这显然不起作用,但如果不起作用,我不希望这个过程保持打开状态

我想要的是某种形式的(可能过了一段时间后关闭此过程可能还不起作用)

例如(非真实代码):

#/usr/bin/ksh
尝试定时器(运行4分钟后停止)
{
./SSH测试-data-i-want.txt
用户名
密码
一些输入
其他一些输入
一些按键
出口0
}
抓住
{
当出现问题时终止此过程
}

这段代码可能是完全错误的,所以我愿意选择。再说一次,在你推荐[COOL LIBRARY HERE]之前,这个服务器没有它们,我无法安装它们。仅限Korn脚本。

是需要用户名/密码还是ssh连接的ncurses应用程序?有两台机器-服务器运行ncurses应用程序,而客户机使用ssh连接。你说你无法控制可用的软件。这是针对服务器、客户端还是两者?问题还不清楚。您在哪个平台上编写脚本/开发,运行/执行哪个平台,以及这些平台如何通信,输入是什么,预期输出是什么。SSH服务器和应用程序都需要单独的身份验证。(Unix)服务器上的应用程序正在使用(我假定)NCurses。我无法控制服务器(除了允许我将KornShell脚本放在那里)。我完全控制客户端(基于Windows),客户端将通过SSH连接,但我希望如此。是ncurses应用程序需要用户名/密码还是SSH连接?有两台机器-服务器运行ncurses应用程序,而您使用SSH连接的是客户机。你说你无法控制可用的软件。这是针对服务器、客户端还是两者?问题还不清楚。您在哪个平台上编写脚本/开发,运行/执行哪个平台,以及这些平台如何通信,输入是什么,预期输出是什么。SSH服务器和应用程序都需要单独的身份验证。(Unix)服务器上的应用程序正在使用(我假定)NCurses。我无法控制服务器(除了允许我将KornShell脚本放在那里)。我可以完全控制客户端(基于Windows),它将通过SSH进行连接。
#!/usr/bin/ksh

Try Timer(Kill when been running for 4 mins)
{
    ./SSH-Test << TextForInput > the-data-i-want.txt
    the-username
    the-password
    some-input
    some-other-input 
    some-key-press
    exit 0
}
Catch
{
    KILL this process as something has gone wrong
}