1

標準入力からデータを取得する perl スクリプトを ssh 経由でリモートで実行しようとしています。トリッキーな部分は、スクリプト自体をリモート サーバーにアップロードしたくないということです。リモート スクリプトが stdin から読み取るデータは、ローカルで実行される別の perl スクリプトによって生成されます。

次のように仮定します。

  • データを生成するローカル スクリプトは cron_extract_section.pl と呼ばれます
  • リモートで実行される私のローカル スクリプトは cron_update_section.pl と呼ばれます
  • どちらのスクリプトも、コマンド ラインで 1 つの引数、つまり単純な単語を取ります。

スクリプトがリモート マシンに存在する場合は、スクリプトをリモートで実行できます。

./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

私が理解できないのは、ローカル スクリプト cron_update_section.pl を ssh 経由で perl にフィードする方法と、ローカル スクリプト cron_extract_section.pl の結果を perl にパイプする方法です。

私は次のことを試しました.perlスクリプトは正常に実行されますが、標準入力から読み取るものはありません:

./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 に答える