0

Java アプリケーションでいくつかのコマンドを実行するために apache-commons-exec を使用しています。

「ls -la /home/user」を実行するとうまくいきます。

しかし、私はこのようなことを実行する必要があります

./setEnvsOfTypeXXX.sh; ./setEnvsOfTypeYYY.sh; ls -la /home/user

コマンドを CommandLine オブジェクトに入力しましたが、機能しません。

空の文字列と -559038737 終了コードを返します。

環境とスクリプトの性質(最初のものは必要な環境変数を設定します); すべての呼び出しをスクリプトに入れることはできません o 多くの解決策を試しましたが (すべてのコマンドを "'" のような引用符で囲むか、PumStreamHandlet 入力ストリームを使用するなど)、これまでのところ何も機能していません...

誰にもアイデアがありますか?

4

3 に答える 3

1

試す

sh -c '. ./setEnvsOfTypeXXX.sh; . ./setEnvsOfTypeYYY.sh; ls -la /home/user'

あなたの命令として

ここで必要だと思う 2 つのこと。

まず、環境変数を設定する場合は、おそらく . 次に、シェルを実行し、シェルにシェル スクリプトを実行させ、次のコマンドをすべて同じコンテキストで実行します。

于 2015-12-14T13:31:37.333 に答える
-1

このコードを試しました

cmdLine = new CommandLine("/bin/bash");
cmdLine.addArgument("-c");
cmdLine.addArgument(new StringBuilder().append("'").append(command).append("'").toString());

そして、command = "ls";

エラーがあります

bash: ls: No such file or directory

楽しい事実: Windows ではこれで問題なく動作します。

        cmdLine = new CommandLine("cmd.exe");
        cmdLine.addArgument("/c");
        cmdLine.addArgument(new StringBuilder().append("\"").append(command).append("\"").toString());
        logger.info("Command win line: cmd.exe /c \""+command + "\"");

私は今、完全に選択肢がありません!!!

于 2015-12-14T17:25:21.910 に答える
-1

私は回避策を得ました:コマンドで一時的なshファイルを作成し、シバンを最初の行に配置して許可を与え、このファイルを1つのコマンドラインで実行し、結果と出力を取得し、最後に一時ファイルを削除します...

そしてそれは動作します!

于 2015-12-14T19:38:08.837 に答える