我有一些shell脚本练习从其他程序读取管道输入,但我不确定如何解决这个问题。
我无法真正修复/修改内部的程序robinbotter从文件equities.sym和blacklist.sym获取其输入,每个简单的文本文件每行包含一个股票代码。
当它运行正常时,其输出产生:
...
Downloading instruments: [ AFL KELYB LFUS ]
...
当它因内部错误而中断时,
...
Downloading instruments: [ AFL KELYB LFUS LNVGY
并停止那里,没有进一步的输出,产生退出代码0,就像在好的情况下(不幸的是)。
在程序处理它们时,打印机符号会稍微延迟打印 - 两者之间没有换行符。
当它遇到LNVGY或不可预测的任何其他许多可能性时,它会以某种方式无法处理或至少跳过它们,而是在没有适当的异常或错误代码的情况下崩溃。
我正在尝试在BASH中编写一个简约的包装脚本(例如retryRB.sh ./robinbotter),其中:
我熟悉像awk和sed这样的工具,如果Bash没有削减它,我会很乐意在Ruby中构建一个简短的解决方案。
在这里,您有一个Bash版本的代码,可以模仿二进制文件的功能。然后你有一个包装器,它会在应用程序成功完成时记录,并在失败时记录。如果失败,它还会附加最后打印的项目,如下图所示(在这种情况下,我在Bomb上强硬编码失败!和Boom!但你明白了):
#!/bin/bash
some=('Pera' 'Manzana' 'Frutilla' 'Durazno' 'Banana' 'Lechuga' 'Sandia' 'Papa' 'Melon' 'Milanesa' 'Bomb!' 'Boom!')
printf 'Downloading instruments: [ '
for (( i=1 ; i < 5 ; i++ )) {
item=${some[$( shuf -i 0-$(( ${#some[@]} - 1 )) -n 1 )]}
printf "$item"
[[ $item == 'Bomb!' || $item == "Boom!" ]] && exit || printf "$item"
[[ $i -lt 4 ]] && printf ' '
}
printf ' ]'
#!/bin/bash
while :
do
res=$( ./main.sh )
[[ ! "$res" =~ \[[^]]*\] ]] && printf "Failure : ${res##*[\[ ]}" || printf "Success"
printf '\n'
sleep 1
done
您可以测试这些脚本,然后将您的二进制文件放在main.sh的位置。问候!