我有几种语言的脚本,我pipe道ssh让他们在其他主机上调用。 对于shell脚本,我可以这样做:
ssh < /path/to/script.sh
对于其他语言的脚本,我发现自己必须这样做:
ssh python - < /path/to/script.py
在本地我可以运行脚本而不指定解释器,由于它们的剪切线和可执行位。
我怎样才能通过从shebang调用适当的解释器ssh执行脚本,而不考虑语言? 有什么我可以有ssh调用,无论脚本语言来做到这一点?
ssh调用是我正在开发的又一个脚本的一部分,这是严格的编码而不是服务器pipe理。
你可以调用一个读取它的input到一个临时文件的命令并执行它吗? 就像是
ssh user@host '{ F=$(mktemp /tmp/scripts.XXXXXX); cat > $F ; chmod +x $F; $F; rm $F }' < foo.py
你不能。 当它exec一个文件时,shebang行被操作系统识别。 当你通过ssh传输命令时,你只是发送命令到shell(/ bin / sh)或者你指定的其他命令应该运行。
让远程服务器识别shebang的唯一方法是将文件复制到远程服务器并设置执行位。
你可以通过在ssh上编写一个包装器来伪装它,在标准input中查找一个shebang行来确定运行的命令,或者通过做一些欺骗来使非sh脚本在sh下运行,就像经典的tcl习惯用法
# \ exec tclsh "$0" "$@"
(我不知道其他语言的等价物)