【发布时间】:2019-05-14 19:42:50
【问题描述】:
我们有一个 Linux 服务器,它可以运行诊断脚本 diag.pl,它协调其他服务器的报告。
diag.pl 遍历子服务器,对于每个子服务器,SSH 进入并运行一个 bash 脚本,该脚本将信息传回:
my $cmd=sprintf("ssh %s sudo /usr/lib/support/report.sh -e %s | uudecode -o \"%s-outfile.tgz\") 2>%1 |", $server, $specialparam, $servername)
report.sh 中发回数据的代码行是:
uuencode --base64 ${REPORT}.tar.gz /dev/stdout
我想更新 report.sh 以发回额外的信息行,例如:
echo "special-file-found=${SFF}" > /tmp/sff.cfg
uuencode --base64 /tmp/sff.cfg > /dev/stdout
找到特殊文件后,Perl 脚本将更新,以便不再将 specialparam 发送回后续的 report.sh 调用。
有没有一种发送输入的好方法,以便 Perl 可以轻松捕获它?
我尝试了什么
- 使用
setattr在tar.gz 上设置user.commentattr,但注释在uuencoding 中不存在 - 目前认为我最好的办法是使用上面的伪代码,创建一个新文件进行编码和发送,并更新 Perl 脚本以在每次新传输时检查它,直到找到特殊文件。
【问题讨论】:
-
我们需要查看更多代码。
-
我只是在询问如何发送指标,与其余逻辑无关(这很重要)。你还想看什么?
-
this guide to good questions 的一个要点是创建一个example of what you've tried 供我们提出改进建议。如果没有它,人们可能会倾向于反对no code、no research,当然还有no MCVE。给我们上下文。 :)
-
您的 perl 命令调用 report.sh 脚本并 uudecode 整个输出。现在您希望报告脚本打印 uuencoded 数据和一些纯文本?
-
我认为这一切都必须是 uuencoded 数据,因为网络是如何工作的。我会更新我的问题。