Причина, по которой он не работает, заключается в том, что кавычки в этой версии не имеют того же эффекта, что и в командной строке.Когда вы вызываете SSH из bash, вы помещаете удаленную команду в кавычки, чтобы она все интерпретировалась как один аргумент.Баш делает разделение аргументов за вас.С exec
Java разделяет аргументы за вас.Документация для exec
описывает, как она разделяется.Он использует StringTokenizer
, который довольно тупой и разделяет строку на основе пробелов (игнорируя кавычки).Это означает, что массив аргументов, передаваемых в команду, выглядит примерно так:
{ "/usr/site/swapimages.sh", "root@something", "'/root/testRemote.sh",
code, newCodeContents + "'" }
Может быть даже больше строк, если в code
или newCode
есть пробелы.Обратите внимание, что ваша команда состоит из нескольких элементов в массиве и поэтому будет рассматриваться как несколько аргументов ssh.Кроме того, ssh
фактически попытается выполнить команду, которая находится в каталоге с именем '
.Однако вы хотите передать следующее:
{ "/usr/site/swapimages.sh", "root@something",
"/root/testRemote.sh " + codeContents + " " + newCodeContents }
Обратите внимание, что кавычек нет, и вся команда является третьим элементом в массиве.
Итак, вам просто нужновручную создайте строковый массив и используйте другую форму exec
, которая принимает строковый массив и которая должна решить проблему.