自动化要求输入的 Unix 命令行应用程序

自动化要求输入的 Unix 命令行应用程序

我正在尝试自动执行 Unix 命令脚本并将输出通过管道传输到 mailx,这样我就可以知道是否需要在通过 FTP 传输文件之前手动编辑文件。其中很多操作都是自动完成的,但由于存在错误,如果脚本检测到某些数据,我需要手动暂停自动化过程。

我正在尝试运行脚本 display_orders。启动脚本后,它会要求输入,然后返回输出。我需要为脚本提供一个 TargetSubID 值,然后将输出重定向到 mailx。

username@unix$ display_orders
TargetSubID: BROKERA
Size:
Side:
Symbol:

There were 3 trades found!

TargetSubID、Size、Side 和 Symbol 是输入提示。您可以输入要搜索的值,也可以按 Enter 继续下一个提示。在最后一个提示中,脚本会获取所有输入并执行其神奇的操作,然后根据输入返回值。

我曾尝试做过类似的事情:

display_orders << EOD
? BROKERA
?
?
?
?EOD

但脚本确实运行了,似乎存在输入解析问题(我不指望您能解决)。查看 display_orders 的代码,它看起来相当标准的 Perl,它会截取输入并进行解析。

我只想获得一个命令行解决方案,以便我可以将其添加到我的 cron 作业中(另外我一直很好奇如何自动化基于输入的控制台应用程序)。

我尝试过谷歌搜索,但我的谷歌能力显然对这个主题不太了解。我想我只是想将输入重定向到控制台应用程序,但我认为我根本不理解 << 运算符的工作原理。

最后,我想要一个可能看起来类似于此的解决方案(我意识到这不起作用,但这可能有助于某人理解我正在尝试做什么):

display_orders << BROKERA | mailx -s 'Daily OATS Check' [email protected]

答案1

我认为缺少的要素是您的 display_orders 脚本的工作方式(即,如果没有具体信息,问题就无法得到正确解决)。

“期望”绝对是“最佳”的解决方案。

不过,我确实想出了一个快速而又巧妙的破解方法,可能(但可能不会)对你有用。如果问题是输入的轻微延迟使 display_orders 脚本混乱,并且它不是时间敏感的,你可以盲目地在响应之间等待一小段时间 -

(
echo $BROKERA
sleep 1
echo $Size
sleep 1
echo $Side
sleep 1
echo $Symbol
) | display_orders | mailx -s 'Daily OATS Check' [email protected]

当然,sleep 1 可以改为更长的值,并且$BROKERA,,$SIZE$Side已经$Symbol设置好了。这是一个难题,因为它没有反馈来检查它是否回答了正确的问题,而且它很慢,通常很讨厌,但它可能没有任何超出大多数系统要求的特殊软件先决条件)

相关内容