Команда за изграждане на конструктор на процеси на Java

Трябва да стартирам процес в нов прозорец на конзолата. За macs намерих нещо подобно: Изпълнение команда в нов прозорец на Mac OS X терминал, където командата за изпълнение се предава като низ.

Така че направих метод, който при даден списък от низове (като конструктор на процеси), връща списъка от низове (крайната команда), който ще изпълни дадената команда в нов прозорец на конзолата. Бих могъл да добавя дадените низове с интервали, което ще работи през повечето време, но как да го избягам правилно? Например, мога да предам конструктора на процеси new String[] { "echo", "hello world" } и той всъщност прави echo "hello world". И се занимава и с много други случаи (мисля).

Мисля, че обяснението е сложно, така че ето един псевдозапис:

public static String[] getConsoleCommand(String[] command) {
    if operating system is Mac...
        String commandString = concatenate command...
        return new String[] { "osascript", "-e",
            String.format("'tell application \"Terminal\" to do script \"%s\"'",
                        commandString.replace("'", "\\\'")) // escape single quote used in 'tell application...'
        };
}

person Raekye    schedule 30.03.2013    source източник


Отговори (1)


person    schedule
comment
Не мисля, че се занимава с конзолни команди. Например, ако пропуска Hello world като един от параметрите, трябва да избяга от интервала също като Hello\ world - person Raekye; 30.03.2013
comment
Не разбирам защо ви трябва пространство за бягство. когато говорим за escape, обикновено се отнася до тези знаци, които ще объркат компилатора/анализатора. Във вашия случай, защо ProcessBuilder не може да отговаря на вашите изисквания? Или ако командата ви е толкова сложна, защо не поставите всичко в скрипт и просто да изпълните този скрипт (може да е с минимални параметри) - person user650749; 31.03.2013
comment
Командата, която създавам, зависи от въвеждането на потребителя. Пространството беше само пример - по принцип не съм специалист по черупки и не съм сигурен за други случаи, с които трябва да се справя. Ако кажете Всичко, за което трябва да се тревожа, е токените с интервали да бъдат поставени в кавички и техните кавички да бъдат екранирани, тогава това ще свърши работа. Не съм сигурен, че имам смисъл - по-ясно ли е? - person Raekye; 01.04.2013
comment
Не е добра практика да изпълнявате каквото и да е въвеждане от потребителя като команда под shell. Това ще има риск от инжектиране, чрез който потребителят може да изпълни всяка команда като rm -f *. ProcessBulider е правилният начин. във вашия случай може да не ви се налага да пишете много изискан shell скрипт. Можете да запишете входа във файл и да имате команда за обработка на този файл. По този начин можете да обработвате потребителския вход по контролиран начин. - person user650749; 03.04.2013
comment
Работи на техния собствен компютър, нещо като настройка за правене на каквото искате. Така че не ме интересува, ако се опитат да изтрият всичките си файлове :P - person Raekye; 03.04.2013