fabricのリモート シェルの標準入力にパイプすることで、複数行のシェル スクリプトを実行する方法はありますか? それとも、常にリモートファイルシステムに書き込んで実行し、削除する必要がありますか? 一時ファイルを回避するため、標準入力に送信するのが好きです。ファブリック API がない場合 (そして、私の調査に基づいていないようです)、おそらくssh
モジュールを直接使用できます。基本的にfabric.api.run
は、コマンド ライン引数としてシェルに渡される 1 行のコマンドに限定されるのではなく、完全な複数行のスクリプトを取り、それをリモート シェルの標準入力に書き込むことを望みます。
明確にするために、このコマンド ラインに相当するファブリックが必要です。
ssh somehost /bin/sh < /tmp/test.sh
Python を除いて、スクリプト ソース coude はローカル ファイル システム上のファイルから取得されず、メモリ内の複数行の文字列になります。これは単一の論理操作であり、リモート側に一時ファイルがないことに注意してください。つまり、予期しない障害やクラッシュによって孤立したファイルが残ることはありません。ファブリックにそのようなオプションがあれば (私が尋ねていることです)、どちらの側にも一時ファイルは必要なく、1 回の ssh 操作だけで済みます。