1

Ubuntuでシェルスクリプト(パラメーター付き)を実行するスタンドアロンアプリケーションがあります。

ProcessBuilder pb1 = new ProcessBuilder("sh","deltapackage_app.sh","part_value","pathtofile"); 
Process process1 = pb1.start();

GUIを介してパラメータを取得しています。これで、Webアプリケーションに実装したいのと同じことを、Webページから入力を取得してサーバーに送信すると、サーバーはパラメーターを使用してシェルスクリプトを実行します。

誰かが私にこれを行うための最良の方法を提案できますか?これを行うには何を使用する必要がありますか。

私はサーバーについて多くのことを学ばなければならないことを知っています。または、ブラウザベースのアプリケーションで同じコードを使用できますか?

4

1 に答える 1

1

次のコード行について考えてみます。

Process p = Runtime.getRuntime().exec("/bin/sh -c /bin/ls > ls.out");

これは、Bourneシェルを実行し、シェルにlsコマンドを実行させて、lsの出力をファイルls.outにリダイレクトすることを目的としています。/ bin / shを使用する理由は、Java内部によってstdoutがリダイレクトされるという問題を回避するためです。残念ながら、これを試してみても何も起こりません。このコマンド文字列がexec()メソッドに渡されると、要素が「/ bin / sh」、「-c」、「/ bin / ls」、「>」、および「」である文字列の配列に分割されます。 ls.out」。shは「-c」スイッチへの引数が1つだけであることを期待しているため、これは失敗します。この作業を行うには、次のことを試してください。

    String[] cmd = {"/bin/sh", "-c", "/bin/ls > out.dat"};
    Process p = Runtime.getRuntime().exec(cmd);

コマンドラインはすでに一連の文字列であるため、文字列はexec()メソッドによってコマンド配列にロードされ、そのまま新しいプロセスに渡されます。したがって、シェルは「-c」とコマンド「/ bin / ls> ls.out」を認識し、正しく実行されます。

http://www.ensta-paristech.fr/~diam/java/online/io/javazine.html

于 2012-06-28T08:14:31.243 に答える