Я пишу скрипт, который дал бы мне возможность удаленно выполнять другие локальные скрипты bash по SSH без их загрузки.Некоторые из моих серверов имеют Linux, некоторые FreeBSD с csh по умолчанию.До сих пор я пришел к следующему:
ssh remote_server 'bash -c '\'"$(cat local_script.sh)"\'' script_parameters'
Это позволяет мне выполнять local_script.sh на remote_server, поддерживает интерактивность (например, команда «read» будет работать в local_script.sh), иЯ могу передать позиционные параметры в скрипт.Проблема в том, что если local_script.sh имеет несколько строк, приведенный выше код работает только для удаленных серверов с оболочкой bash по умолчанию.На FreeBSD sshd сначала запускает csh, чтобы выполнить команду «bash -c», и пытается передать код сценария (результат $ (cat local_script.sh)) ему в качестве первого параметра.Но поскольку этот код является многострочным, и csh хочет, чтобы заключительная кавычка была в той же строке, что и начальная кавычка, я получаю «Unmatched».ошибка.Поэтому csh просто не может разобрать этот экранированный многострочный параметр, чтобы передать его процессу bash.
Единственное решение, которое я вижу сейчас, - это синтаксический анализ local_script.sh и автоматическая перезапись его в однострочник с помощью ";»разделители перед передачей через SSH.Но это требует создания другого сценария и, кажется, не так просто.Поэтому я хотел бы спросить, можно ли как-нибудь решить эту проблему с синтаксическим анализом csh miltiline?