Нет, вы должны не заключать в кавычки аргументы * nix. Цитирование необходимо для * nix в интерактивной оболочке, чтобы предотвратить неверную интерпретацию оболочкой, но при непосредственном запуске процесса оболочка не участвует. Следовательно, не нужно цитировать.
Если вы включите кавычки, запущенный процесс увидит их как часть входящих аргументов и сделает что-то вроде (например) попытки открыть имена файлов, содержащие кавычки.
Вы также не хотите, чтобы аргумент "-c" был bash. Это говорит о том, что следующий аргумент нужно анализировать как командную строку, но вы предоставляете список аргументов. Удалите опцию «-c» и лишние кавычки, и она должна работать.
Правильный вызов Linux будет:
ProcessBuilder pb = new ProcessBuilder(
"bash",
"myshellscript.sh",
"param 1",
"param 2",
"param 3"
);
Кроме того, если файл "myshellscript.sh" является исполняемым и имеет соответствующую строку shebang (например, "#! / Bin / bash"), вам также не нужен аргумент "bash". Это предпочтительнее, потому что если скрипт когда-нибудь будет заменен на другой, написанный на другом языке, вам не придется обновлять вызывающее приложение.
Аналогично, в Windows вам не нужны аргументы "cmd" и "/ c". Средство запуска процесса / ОС должно автоматически запускать пакетный файл (на основе расширения).