У меня есть скрипты на нескольких языках, которые я передаю ssh
чтобы они вызывались на других хостах. Для сценариев оболочки я могу сделать это:
ssh < /path/to/script.sh
Однако для скриптов на других языках мне приходится делать следующее:
ssh python - < /path/to/script.py
Локально я могу запускать сценарии без указания интерпретатора из-за их Shebang строки и исполняемые биты.
Как я могу ssh
выполнять сценарии независимо от языка, вызывая соответствующий интерпретатор из shebang? Есть что-нибудь, что я могу получить ssh
вызывать для этого независимо от языка скриптов?
В 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