ローカルファイルの提供中にJavaプログラムをリモートコマンドとして呼び出すために、Javaプログラム/シェルスクリプトの組み合わせをどのように作成できますか?

ローカルファイルの提供中にJavaプログラムをリモートコマンドとして呼び出すために、Javaプログラム/シェルスクリプトの組み合わせをどのように作成できますか?

これは以下に関連しています。リモートコマンドを実行し、ローカルファイルを入力に渡すには?

私はファイルの最初の行を印刷する単純なJavaプログラムを書いています。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.OutputStreamWriter;

public class ReadFirstLine 
{
    public static void main(String[] args) throws Exception 
    {
       String filename = args[0];

       BufferedReader iR  = new BufferedReader (new FileReader(filename));
       BufferedWriter oW = new BufferedWriter(new OutputStreamWriter(System.out));

       outputWriter.write(iR.readLine());

       iR.close();
       oW.close();
    }
}

ReadFirstLineその後、/ usr / local / RFL / ReadFirstLineスクリプトと呼ばれる/ usr / binディレクトリにシンボリックリンクを作成しました。

#! /bin/bash

java -cp "/usr/local/RFL" ReadFirstLine "$1" 

(/usr/local/RFLにはReadFirstLine.classがあります)

これで、次のようにすべてのディレクトリからReadFirstLineを呼び出すことができます。

$ ReadFirstLine simplefile.txt

別のコンピュータで同じスクリプトを呼び出したいです。だからリモートコンピュータで試してみてください -

$ ssh username@xyz ReadFirstLine < localfile.txt  

しかし、エラーが発生しました。

Exception in thread "main" java.io.FileNotFoundException:  (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at java.io.FileReader.<init>(FileReader.java:58)
    at ReadFirstLine.main(ReadFirstLine.java:12)

このリモート呼び出しが機能するようにJavaプログラム/スクリプトを変更するにはどうすればよいですか?

ベストアンサー1

私はJavaについて何も知りませんが、概念の証明を示すことができます。私たちがいると言うローカルファイル.txt:

Here is the local file.

私たちが持っているリモートコンピュータにリモート.sh:

#!/bin/bash
cat /dev/stdin

リモートコンピュータのスクリプトは、次のプログラムを呼び出します。次から読む stdin。その後、コンテンツを配信します。ローカルファイル.txtSSHコマンドで:

user@local:~$ cat localfile.txt | ssh user@remote remote.sh
Here is the local file.

Javaプログラムが読み取ろうとしています。文書ファイルがリモートコンピュータに存在しません。ローカルファイルを模倣してみることができると思います。

変化リモート.sh到着する:

#!/bin/bash
cat "$@"

そして電話してください

user@local:~$ cat localfile.txt | ssh user@remote 'remote.sh <(cat /dev/stdin)'
Here is the local file.

Javaプログラムでその部分をstdin

推測する次のような場合、状況が乱れる可能性があります。ローカルファイル.txtシェルで拡張可能と解釈できるすべての項目(例*:)を含めますが、これはユーザーが直接把握する必要があります。

おすすめ記事