【问题标题】:How to redirect local ouput to stdin over ssh to remotely execute a local script?如何通过 ssh 将本地输出重定向到标准输入以远程执行本地脚本?
【发布时间】:2013-02-05 06:15:58
【问题描述】:

我正在尝试通过 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

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

【问题讨论】:

    标签: unix ssh pipe io-redirection


    【解决方案1】:

    使用DATA 文件句柄。例如:

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

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

    然后,运行如下:

    (cat script.pl && /cron_extract_section.pl ${SECTION}) | ssh $host perl
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2013-04-30
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多