Назад | Перейти на главную страницу

Передача скриптов в ssh и вызов shebang

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

ssh < /path/to/script.sh

Однако для скриптов на других языках мне приходится делать следующее:

ssh python - < /path/to/script.py

Локально я могу запускать сценарии без указания интерпретатора из-за их Shebang строки и исполняемые биты.

Как я могу ssh выполнять сценарии независимо от языка, вызывая соответствующий интерпретатор из shebang? Есть что-нибудь, что я могу получить ssh вызывать для этого независимо от языка скриптов?

Обновление0

В ssh вызов является частью еще одного сценария, который я разрабатываю, он строго специфичен для кодирования, а не управления сервером.

Вы не можете. Линия shebang распознается ОС, когда она exec-загрузка файла. Когда вы подключаете его по ssh, вы просто отправляете команды в оболочку (/ bin / sh) или любую другую указанную вами команду.

Единственный способ заставить удаленный сервер распознать shebang - это скопировать файлы на удаленный сервер и установить бит выполнения.

Вы можете подделать это, написав оболочку вокруг ssh, которая ищет строку shebang в стандартном вводе, чтобы определить, какую команду запускать, или выполнив некоторые хитрости, чтобы заставить скрипты non-sh запускаться под sh, как классическая идиома tcl

# \
exec tclsh "$0" "$@"

(Я не знаю эквивалента для других языков)

Не могли бы вы вызвать команду, которая считывает ввод во временный файл и выполняет его? Что-то вроде

ssh user@host '{ F=$(mktemp /tmp/scripts.XXXXXX); cat > $F ; chmod +x $F; $F; rm $F }' < foo.py