答案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" "$@"
(我不知道其他语言中是否有对应的版本)