将脚本传递给 ssh 并调用 shebang

将脚本传递给 ssh 并调用 shebang

我有几种语言的脚本,我通过管道传输到ssh在其他主机上调用它们。对于 shell 脚本,我可以这样做:

ssh < /path/to/script.sh

然而,对于其他语言的脚本,我发现自己必须这样做:

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

在本地我可以在不指定解释器的情况下运行脚本,因为它们舍邦行和可执行位。

如何ssh通过从 shebang 调用适当的解释器来执行脚本(无论语言如何)?是否有可以ssh调用的东西(无论脚本语言如何)来执行此操作?

更新0

ssh调用是我正在开发的另一个脚本的一部分,它严格特定于编码而不是服务器管理。

答案1

你能调用一个命令,将输入读入临时文件并执行吗?比如

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

答案2

不能。当使用exec-ing 操作符时,操作系统会识别 shebang 行。当您通过 ssh 传输它时,您只是将命令发送到 shell (/bin/sh) 或您指定的任何其他应运行的命令。

让远程服务器识别shebang的唯一方法是将文件复制到远程服务器并设置执行位。

你可以通过编写一个 ssh 包装器来伪造它,该包装器在标准输入中查找 shebang 行来确定要运行什么命令,或者通过一些技巧使非 sh 脚本在 sh 下运行,就像经典的 tcl 习惯用法一样

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

(我不知道其他语言中是否有对应的版本)

相关内容