Java ProcessBuilder: команда не найдена - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь запустить какой-нибудь код Java, найденный в linux.

    maudecmd = new String[files.length+5];
    maudecmd[0] = "maude";
    maudecmd[1] = "-no-banner";
    maudecmd[2] = "-no-ansi-color";
    maudecmd[3] = "-no-mixfix";
    maudecmd[4] = "-no-wrap";
    for(int i = 0; i < files.length; ++i) {
        maudecmd[5+i] = files[i];
    }

    ProcessBuilder pb = new ProcessBuilder(maudecmd);
    if(dir != null)
        pb.directory(dir);
    pb.redirectErrorStream(true);
    maude = pb.start();

Это вызывает IOException - bash не может найти команду 'maude'.

У меня есть этохотя в моем файле .bashrc есть псевдоним:

alias maude='~/lib/maude/maude.linux'

Если я изменю код следующим образом:

maudecmd[0] = "/u/h/os215/lib/maude/maude.linux";

Он отлично работает.

Я хочу изменить этот кодтак что это более надежно - если кто-то может запустить Maude из командной строки, ProcessBuilder также сможет его использовать, каким бы конкретным способом пользователь не связывал Maude.

Можно ли это достичь?

Ответы [ 2 ]

4 голосов
/ 15 октября 2010

.bashrc псевдонимы влияют только на оболочку BASH.Вместо этого вы можете экспортировать переменную окружения, но я не знаю, подхватит ли это и Java ProcessBuilder.

Сказав это, я не понимаю, почему это не сработает:
maudecmd[0] = "/bin/bash maude";

2 голосов
/ 15 октября 2010

ProcessBuilder может запускать только реальные процессы.Здесь maude является псевдонимом bash, поэтому доступен только для bash.

Вы можете вместо определения псевдонима использовать переменную окружения для указания на исполняемую папку.Или просто передайте путь к исполняемому файлу в качестве аргумента вашего приложения.

...