Passando scripts para ssh e invocando o shebang

1

Eu tenho scripts em vários idiomas que canalizo para ssh para que sejam invocados em outros hosts. Para scripts de shell, posso fazer isso:

ssh < /path/to/script.sh

Para scripts em outros idiomas, no entanto, tenho que fazer isso:

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

Localmente, posso executar os scripts sem especificar o interpretador, devido às linhas shebang e executáveis bits.

Como posso ter ssh executar scripts independentemente do idioma invocando o interpretador apropriado do shebang? Existe algo que eu possa ter ssh invocar independentemente da linguagem de scripts para fazer isso?

Update0

A invocação de ssh é parte de outro script que estou desenvolvendo, isso é estritamente específico para codificação e não gerenciamento de servidor.

    
por Matt Joiner 20.07.2011 / 02:41

2 respostas

3

Você poderia invocar um comando que lê sua entrada em um arquivo temporário e executa isso? Algo como

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

Você não pode. A linha shebang é reconhecida pelo sistema operacional quando é exec -ing um arquivo. Quando você está passando por ssh, você está apenas enviando comandos para o shell (/ bin / sh) ou qualquer outro comando que você especificou deve ser executado.

A única maneira de ter o servidor remoto reconhecendo o shebang é copiar os arquivos para o servidor remoto e definir o bit de execução.

Você pode fingir escrevendo um wrapper em torno de ssh que procura por uma linha shebang na entrada padrão para determinar qual comando executar, ou fazendo alguns truques para fazer scripts não sh rodarem sob sh, como o idioma clássico tcl

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

(não sei o equivalente para outros idiomas)

    
por 20.07.2011 / 03:04

Tags