1

我正在尝试通过 ssh 远程执行从标准输入获取数据的 perl 脚本。棘手的部分是我不想将脚本本身上传到远程服务器。远程脚本将从标准输入读取的数据由另一个本地运行的 perl 脚本生成。

让我们假设以下内容:

  • 我的本地脚本生成数据称为 cron_extract_section.pl
  • 我将远程运行的本地脚本称为 cron_update_section.pl
  • 两个脚本都在命令行上接受一个参数,一个简单的词

如果脚本存在于远程机器上,我设法远程执行脚本:

./cron_extract_section.pl ${SECTION} 2> /dev/null | ssh user@remote ~/path/to/remote/script/cron_update_section.pl ${SECTION}

我也知道我可以在远程服务器上运行脚本而无需先上传它,使用以下语法:

ssh user@remote "perl - ${SECTION}" < ./cron_update_section.pl

我不知道如何通过 ssh 将本地脚本 cron_update_section.pl 提供给 perl,并将本地脚本 cron_extract_section.pl 的结果通过管道传输到 perl。

我尝试了以下方法,perl 脚本执行得很好,但是从 stdin 中没有可读取的内容:

./cron_extract_section.pl ${SECTION} 2> /dev/null | ssh user@remote perl - ${SECTION} < ./cron_update_section.pl

您知道是否可以在不修改脚本的情况下这样做?

4

1 回答 1

0

使用DATA文件句柄。例如:

要在远程机器上运行的本地脚本:

# script.pl
while(<DATA>) {
  print "# $_";
}
__DATA__

然后,将其运行为:

(cat script.pl && /cron_extract_section.pl ${SECTION}) | ssh $host perl
于 2013-02-11T14:14:11.537 回答