0

Java コードからシェル スクリプトを実行しようとしています。

シェルスクリプト:

        function print() {
            echo "First Script"
        }
        print
        echo "Hello"

Java コード :

        final String cmd = "sh test.sh";
        final Process p = Runtime.getRuntime().exec(cmd);
        InputStream is = p.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
          System.out.println(line);
        }

        is = p.getErrorStream();
        isr = new InputStreamReader(is);
        br = new BufferedReader(isr);
        while ((line = br.readLine()) != null) {
          System.out.println(line);
        }

しかし、上記のコードを実行すると、このエラーが発生しますtest.sh: 1: Syntax error: "(" unexpected

コマンドラインで試してみると、同じコードが正常に機能し、出力を確認できます。Javaコードも試しdos2unixてみましたが、まだ運がありません。どんな種類の助けも本当に感謝しています。

4

3 に答える 3

3

それを使用して実行するbashと動作します。

私は(また)でスクリプトを開始します#!/bin/bash。こうすることで、スクリプトを呼び出す人に依存するのではなく、スクリプト自体が使用するシェルを決定します。以下に示すように、任意のスクリプト プロセスを使用してスクリプトを呼び出すことはできますが、シバンは使用中のスクリプト言語/方言を強調表示します。

Java からのプロセスの呼び出しと stdout/sterr の収集に関する問題にも注意してください。

于 2012-10-10T11:55:05.633 に答える
1

ほとんどの場合、システムに/bin/shは Bash ではなく POSIX 互換のシェルがあります (これは、ほとんどの商用 Unice と同様に、Ubuntu と Debian の場合です)。POSIX シェルfunctionでは、次のキーワードを使用しないでください。

print() {
    echo "First Script"
}
print
echo "Hello"

動作するはずです。(そして、その形式は Bash でも機能します。)

于 2012-10-10T11:57:04.347 に答える
-2

Java のバージョンが OS と一致することを確認します。OS が 32b で、Java が 64 バージョンである可能性があります。

于 2014-10-10T14:52:34.527 に答える