Вызов скрипта bash с перенаправлением из Java - PullRequest
1 голос
/ 03 декабря 2010

У меня есть сценарий оболочки bash, который выполняет кучу команд и перенаправляет вывод команды в файлы журнала, используя >. Если я вызываю сценарий оболочки из Java, используя Runtime.getRuntime().exec("sh shellscript.sh");, сценарий оболочки запускается, но файлы журнала не записываются! Зачем? И как мне заставить это работать?

EDIT: Хорошо, так что я пытаюсь сделать немного по-другому. Ваш код работает нормально. Но теперь перенаправление внутри Java-программы не работает. В приведенном ниже примере программы файл журнала не записывается!

$ cat script.sh 
#!/bin/sh

echo "Hello there"
echo "Hello there 2"


$ cat RunScript.java 
public class RunScript {
    public static void main(String[] argv) throws Exception {
        int i = Runtime.getRuntime().exec("sh /home/gpx/script.sh >> log").waitFor();
        System.out.println("Exit code : " + i);
    }
}

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

Перенаправления, в которые вы пишете - пишут ли они в абсолютные пути к файлам или в относительные файлы?

Если его относительно, то они (вероятно) будут относиться к рабочему каталогу - так что проверьте это.

ОБРАЗЕЦ ИСПЫТАНИЙ, КОТОРЫЙ Я ПОКАЗАЛ, ЧТО ПОКАЗЫВАЕТ, ЧТО АБСОЛЮТНЫЕ ПУТИ БУДУТ РАБОТАТЬ

$ cat script.sh 
#!/bin/sh

echo "Hello there"
echo "Hello there 2" >> /Users/madhurt/test/log

exit 2

$ cat RunScript.java 
public class RunScript {
    public static void main(String[] argv) throws Exception {
        int i = Runtime.getRuntime().exec("sh /Users/madhurt/test/script.sh").waitFor();
        System.out.println("Exit code : " + i);
    }
}
$ pwd
/Users/madhurt/test
$ ls -lrt 
total 24
-rwxr-xr-x  1 madhurt  staff   87 Dec  6 18:28 script.sh
-rw-r--r--  1 madhurt  staff  214 Dec  6 18:32 RunScript.java
-rw-r--r--  1 madhurt  staff  907 Dec  6 18:32 RunScript.class
$ java RunScript
Exit code : 2
$ ls -lrt 
total 32
-rwxr-xr-x  1 madhurt  staff   87 Dec  6 18:28 script.sh
-rw-r--r--  1 madhurt  staff  214 Dec  6 18:32 RunScript.java
-rw-r--r--  1 madhurt  staff  907 Dec  6 18:32 RunScript.class
-rw-r--r--  1 madhurt  staff   14 Dec  6 18:33 log
$ cat log 
Hello there 2
$ 
0 голосов
/ 06 декабря 2010

Проверьте, есть ли у вас права на запись в путь, к которому вы добавляете журнал.Если вы запустите это приложение в контейнере, оно, скорее всего, будет использовать идентификатор этого пользователя.Попробуйте записать файл в /tmp/ и посмотрите, появится ли он там.

0 голосов
/ 03 декабря 2010

Мои знания Java скудны, но я понимаю, что вы должны написать:

Runtime.getRuntime().exec("sh shellscript.sh").waitFor();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...