有没有办法通过将多行 shell 脚本通过管道传输到fabric中的远程 shell 的标准输入来执行?或者我必须总是将它写入远程文件系统,然后运行它,然后删除它?我喜欢发送到标准输入,因为它避免了临时文件。如果没有fabric API(而且似乎没有基于我的研究),大概我可以直接使用该ssh
模块。基本上,我希望fabric.api.run
不限于作为命令行参数传递给 shell 的 1 行命令,而是采用完整的多行脚本并将其写入远程 shell 的标准输入。
为了澄清我想要这个命令行的结构等价物:
ssh somehost /bin/sh < /tmp/test.sh
除了在 python 中,脚本源代码不会来自本地文件系统上的文件,它只是内存中的多行字符串。请注意,这是一个单一的逻辑操作,并且远程端没有临时文件,这意味着意外失败和崩溃不会留下孤立文件。如果fabric 中有这样的选项(这就是我要问的),则任何一方都不需要临时文件,而这只需要一个ssh 操作。