2

В моем сценарии я делаю что-то вроде этого:

command="some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"
ssh_command="ssh root@$ip '$command'"

echo $ssh_command
exec $ssh_command

Эхо дает вывод, как это:

ssh root@1.1.1.1 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'

После вещи "exec" я получаю вывод:

bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory

Однако, когда команда копируется из вывода эха и запускается непосредственно из терминала, она работает как шарм. Есть идеи почему?

2 ответа2

0

Нохуп может быть полезен для вас.

Попробуйте добавить что-то подобное по ссылке ниже.

ssh -n -f user @ host " sh -c 'cd /whereever; nohup ./wh независимо> /dev /null 2> & 1 &'"

https://stackoverflow.com/q/29142/1666510

0

exec заменяет оболочку программой, вызывая ее с предоставленными аргументами. Оболочка видит 2 токена: "exec" и «some /path /script.sh arg1 arg2; some /path /script2.sh arg1 arg2;». Второй аргумент интерпретируется как путь к программе для выполнения, включая все пробелы и точки с запятой. Только оболочка знает, как разделять аргументы в пробелах и разделять команды точкой с запятой. Следовательно, вы должны заменить exec вызовом оболочки, например, sh -c "$ssh_command" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .