2016-08-04 5 views
1

私は、シェルスクリプトを実行しているJavaプログラムを作成しています。シェルスクリプトは別のシェルスクリプトを呼び出しています。子スクリプトによって返された出力を親シェルスクリプトに出力しようとしています。 以下は私のコードです。Java with shell Script

public class App 
{ 
    public static void main(String[] args) throws IOException, InterruptedException 
    { 
     String command = new String("/home/Test.sh"); 
     Runtime rt = Runtime.getRuntime(); 
     Process process = rt.exec(command); 
     process.waitFor(1, TimeUnit.MINUTES); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(  
       process.getInputStream()));           
     String s;                 
     while ((s = reader.readLine()) != null) {         
      System.out.println("Script output: " + s);        
     } 

シェルスクリプト:Test.sh

#!/bin/bash 
    result=$(bash myscript.sh) 
    echo "$result" 

myscript.sh

#!/bin/bash 
    echo "50" 

私は空の出力を取得しています。私は、Javaプロセスがシェルスクリプトが終了するのを待っていないので、最初のことだと思っていました。 waitFor()を追加しましたが、まだ使用していません。ある人が親切に手伝ってくれる?

+1

あなたのコードで私の側で動作するので、エラーストリームを確認してください。 –

+0

これを試してください。結果= $(bash/home/myscript.sh)、myscript.shのフルパス –

答えて

1

これを試してください。これは問題を待っていません。

#!/bin/bash 
    result=$(bash /home/myscript.sh) # full path of myscript 
    echo "$result" 

以下のようにbashエラーも処理します。

public static void main(String[] args) throws IOException { 
     String command = new String("/tmp/1/Test.sh"); 
     Runtime rt = Runtime.getRuntime(); 
     Process process = rt.exec(command); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(  
       process.getInputStream())); 

     String s;                 
     while ((s = reader.readLine()) != null) {         
      System.out.println("Script output: " + s); 
     } 

     BufferedReader stdError = new BufferedReader(new 
      InputStreamReader(process.getErrorStream())); 

     System.out.println("Here is the standard error\n"); 
     while ((s = stdError.readLine()) != null) { 
      System.out.println(s); 
     } 

    } 

adduser tests;

の1- myscript.sh:

#!/bin/bash 
adduser test 
echo "50" 

Javaコンソール出力。

Script output: 50 
Here is the standard error of the command (if any): 

adduser: Only root may add a user or group to the system. 

2- myscript.sh:

#!/bin/bash 
sudo adduser test 
echo "50" 

Javaコンソール出力。

Script output: 50 
Here is the standard error of the command (if any): 

sudo: no tty present and no askpass program specified 

3-
myscript.sh:

#!/bin/bash 
echo -e "YOURPASSWORD=\n" | sudo -S adduser -shell /bin/bash --home /home/test test 
echo -e "YOURPASSWORD\n" | sudo deluser --remove-home test 
echo "OK" 

Javaコンソール出力。

Script output: Adding user `test' ... 
Script output: Adding new group `test' (1002) ... 
Script output: Adding new user `test' (1001) with group `test' ... 
Script output: Creating home directory `/home/test' ... 
Script output: Copying files from `/etc/skel' ... 
Script output: Try again? [y/N] Changing the user information for test 
Script output: Enter the new value, or press ENTER for the default 
Script output: Full Name []: Room Number []:  Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Looking for files to backup/remove ... 
Script output: Removing files ... 
Script output: Removing user `test' ... 
Script output: Warning: group `test' has no more members. 
Script output: Done. 
Script output: OK 
Here is the standard error of the command (if any): 

[sudo] password for ..: Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error 
passwd: password unchanged 
Use of uninitialized value $answer in chop at /usr/sbin/adduser line 563. 
Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564. 
Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589. 
Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590. 
+0

ありがとうございました..フルパスを追加すると助けになりました。私はbashエラー処理を理解したい。どのような種類のエラーがキャプチャされますか?スクリプトで** adduser **コマンドを使用しているとします。** rootユーザーだけが新しいユーザーを追加できます** rootユーザーでない場合はエラーがスローされます。それはここに捕らえられるのだろうか? – Learner

+1

はい、キャプチャされます。また、上記のようにいくつかのテストを試みます。多分これが助けになるかもしれない –

関連する問題