Scala: правильная команда оболочки не работает с использованием ProcessBuilder
Я пытаюсь запустить команду внутри Scala, эта команда является вызовом ssh, который требует выполнения строки cmd внутри обслуживающей машины, похоже,
sshpass -p PSW ssh USER@IP "/absolute_path/program -input /absolute_path/filename"
если я печатаю эту строку из Scala и запускаю ее непосредственно внутри оболочки, она работает правильно, но работает с использованием
cmd !
СЕРВЕР возвращает ошибку
bash: /absolute_path/program -input /absolute_path/filename: No such file or directory
кто-то может сказать мне, как исправить, пожалуйста? благодарю вас
ОБНОВЛЕНО
var nestedcmd = "/absolute_path/program" +
" -input "+ server_dir +"/"+ filename
var cmd = "sshpass -p "+ server_pass +
" ssh "+ server_user +"@"+ server_ip +
" \""+ nestedcmd + "\""
println(cmd)
cmd !
println создает запрос, который я пытаюсь запустить непосредственно внутри оболочки, cmd! должен запустить ту же команду
Я использую это решение во время разработки, потому что в производственном процессе код будет запускаться прямо на сервер, и мне не понадобится вызов ssh, но для разработки мне нужно запустить "программу" на сервере с моего компьютера.
РЕШИТЬ
Достаточно было удалить кавычки, ssh принимает то, что идет после параметров соединения, в качестве команд для запуска на сервере.
1 ответ
Использование отформатированных строк может помочь с такими проблемами
var nestedcmd = """/absolute_path/program -input $server_dir/filename"""
var cmd = """sshpass -p $server_pass ssh $server_user@$server_ip \$nestedcmd"""