скрипт вызывает скрипт через ssh => bash: ...: такого файла или каталога нет - PullRequest
3 голосов
/ 05 марта 2011

Я запускаю скрипт, который вызывает другой скрипт через ssh-соединение.

Мой скрипт выполняет следующую команду:

ssh $cluster "bash $create 2 2 $parts"

, где $cluster - строка ssh, а $create - абсолютный путь сценария bash на целевой машине. Я запускаю ssh $cluster "mkdir $serialized/$number" несколькими строками ранее, и это прекрасно работает.

Однако эта команда возвращает меня:

bash: /data/.../create.bash 1 2 8: No such file or directory

Файл находится на компьютере, и я могу выполнить команду там, но я не могу понять, как это сделать из скрипта поверх ssh. Я пробовал разные команды, всегда получаю это исключение.

Спасибо за вашу помощь!

Ответы [ 3 ]

3 голосов
/ 05 марта 2011

Обычно вам не нужно вызывать bash.Даже если оболочка, используемая на удаленной машине, не является bash по умолчанию, вы должны настроить скрипт create.bash так, чтобы верхняя часть его была похожа на:

  #!/bin/bash

и она уже вызывала bash.

Другие факторы, которые необходимо учитывать:

  1. укажите полный путь к bash, если путь проблематичный.

  2. убедитесь, что bash существует на удаленном хосте, в противном случае попробуйте вместо 'sh'.

1 голос
/ 05 марта 2011

Удалить цитаты:

ssh $cluster bash $create 2 2 $parts

или поместите их только вокруг аргументов:

ssh $cluster bash "$create 2 2 $parts"

если значения вашей переменной включают пробелы:

ssh $cluster bash "'$create' 2 2 '$parts'"
1 голос
/ 05 марта 2011

Вы уверены, что цитата в сценарии такая же, как вы цитировали?Я ожидаю, что эта ошибка из:

ssh $cluster "bash '$create 2 2 $parts'"

или аналогичного.

(Обратите внимание, что при появлении ошибки вида

bash: mumble: No such file or directory

бормотание принимается за целую строку, поэтому в этом случае он ищет файл с буквальным названием /data/.../create.bash 1 2 8, в котором пробелы и цифры взяты как часть имени сценария, а не как параметры.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...