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

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

ssh < /path/to/script.sh

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

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

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

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

Update0

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

2 ответа

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

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

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

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

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

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

ssh user@host '{ F=$(mktemp /tmp/scripts.XXXXXX); cat > $F ; chmod +x $F; $F; rm $F }' < foo.py
Другие вопросы по тегам