Если вы хотите запустить remote commands via SSH, единственный безопасный способ заключается в использовании arrays и параметр вытекающее.
Во-первых, использовать один массив для хранения команды, опции, флаги, параметры и т.д. Например:
remote_cmd=(touch -- "path with spaces")
echo "${remote_cmd[2]}" # path with spaces
Вы должны будете бежать каждый из этих аргументов для запуска через SSH:
for arg in "${remote_cmd[@]}"
do
remote_cmd_escaped+=("$(printf %q "$arg")")
done
echo "${remote_cmd_escaped[2]}" # path\ with\ spaces
Затем вы должны использовать другой массив для самой команды SSH:
ssh_cmd=(ssh "localhost" "${remote_cmd_escaped[@]}")
Теперь вы с прогоне без проблем:
"${ssh_cmd[@]}"
Убедитесь, что файл был создан с пробелами:
ls "$HOME/path with spaces"
успеха!
Какая ошибка? сделать эхо $ ssh. –
Он просто выводит 'ssh'. У меня нет введенного IP-адреса. –
Ваше задание должно работать нормально. Это проблема с исполнением переменной в качестве команды. См. [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). Зачем вам нужна команда в переменной? –