0

したがって、クライアントとサーバーの Java プログラムがあります。クライアントは Java processbuilder を使用してスクリプトを実行しますが、私の問題は、ユーザーが bash スクリプトに渡す必要がある情報を入力することです。したがって、基本的には、3 つの異なる文字列を、bash スクリプトによって読み取られる 3 つの異なる変数に送信する方法を知る必要があります。このスクリプトはファイルをコピーしているので、java で txt ファイルを作成せず、スクリプトにファイルを読み取らせます。また、これを OS X と Windows で実行できるようにしたいので、改善を歓迎します。現在、UbuntuでJava 7を使用しています。

ここに私がやろうとしていることのスニペットがあります: .java

    Scanner bob = new Scanner(System.in);
    String workingDirectory = new String(System.getProperty("user.dir"));
    File tempDir = new File(workingDirectory); 
    String script = new String(workingDirectory + "/copyjava.sh");

    System.out.print("Designate the location of the file: ");
    String loc = bob.next();
    System.out.print("Type the name of the file w/ extension: ");
    String name = bob.next();
    System.out.print("What is the location of THIS file? "); //I know there is a way to do this automagically but I can't remember how...
    String wkspace = bob.next();
    ProcessBuilder pb = new ProcessBuilder( script, loc, name, wkspace);
    pb.start();
    File myFile = new File (name);

脚本:

read loc

read name

read wkspace

cd $LOC

cp $name $wkspace
4

3 に答える 3

1

シェル スクリプトに問題があります。コマンドはread標準入力から読み取りますが、入力を引数として渡しています。loc 変数の大文字と小文字も変更しています。シェル内の変数は、大文字と小文字が区別されます。スクリプトを次のように変更します。

#!/bin/sh
loc=$1
name=$2
wkspace=$3
cd "$loc" || { printf 'failed to cd to %s\n' "$loc" ; exit 1; }
cp "$name" "$wkspace" || { printf 'failed to copy %s\n' "$name" ; exit 1; }

余談ですが、ファイルをコピーするためだけに、別の言語で記述された外部スクリプトを呼び出す必要はありません。これを Java で実装する必要があります。これを Java で実装すると、コードに必要なプラットフォームの独立性も与えられます。

于 2012-07-25T23:39:30.200 に答える
0

コマンドラインで引数を渡していますが、スクリプトの標準入力から読み取っています。スクリプトを次のように変更してはどうですか。

cd $1

cp $2 $3
于 2012-07-25T23:37:26.807 に答える
0

クライアント/サーバーの相互作用は見られませんが、本当に重要なことに焦点を当てましょう。パラメーターをスクリプトに渡していますが、スクリプトはそれらを標準入力から読み取ろうとしています。

問題を解決するには、スクリプトを次のように変更します。

#!/bin/sh
LOC=$1
name=$2
wkspace=$3

cd $LOC

cp $name $wkspace

詳細については、ドキュメントを参照してください。

しかし、システム固有のスクリプト ファイルが本当に必要になるようなことは何もしていません。ファイルをコピーする最善の方法は、Java が提供する独自のメカニズムを使用することであり、基盤となるオペレーティング システムについて心配する必要はありません。

os.nameこのスクリプトを使い続ける場合は、Windows システム用に別のスクリプトが必要になり、システム プロパティの値に基づいて実行するスクリプトを決定します。

于 2012-07-25T23:39:13.683 に答える