我们有一台 Linux 服务器,可以运行一个诊断脚本
一旦找到特殊文件,Perl脚本将会更新,这样它就不会再把 "specialparam" 发送回给随后的 "report.sh" 调用。
有没有一种好的方法来发送该输入,使得 Perl 能够轻松地捕获它?
我尝试过:
1.使用 "setattr" 在 tar.gz 上设置 "user.comment" 属性,但是注释在 uuencoding 后无法保留。 2.目前认为最好的办法是使用上面的伪代码,创建一个新文件进行编码和发送,并更新 Perl 脚本以检查每个新传输是否找到了特殊文件。
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 能够轻松地捕获它?
我尝试过:
1.使用 "setattr" 在 tar.gz 上设置 "user.comment" 属性,但是注释在 uuencoding 后无法保留。 2.目前认为最好的办法是使用上面的伪代码,创建一个新文件进行编码和发送,并更新 Perl 脚本以检查每个新传输是否找到了特殊文件。
STDOUT
的语句吗?我不知道您如何运行shell脚本,但您可以这样做以获取每个“行”打印。然后,您可以检查每一行是否符合某些“协议”(例如,它是否是或以special-file-found
字符串开头),并相应地采取行动--为进一步调用设置标志或编写控制文件以进行以下运行等。如果不是,则是编码文件。 - zdim