いくつかの引数とテキストファイルを受け入れるLinuxバイナリを備えたリモートマシンがあります。プログラムの出力は、私が常にテキストファイルに書き込むstdoutに書き込まれます。データファイルをリモートマシンにコピーし、そのファイルに対してコマンドを実行して、結果のファイルをコピーして戻すことに気づきました。これには時間がかかり、エラーが発生しやすくなります。
SSHと標準のLinuxツールを使用して、最初にリモートマシンにコピーせずに、ローカルファイルでSSH経由でリモートバイナリを実行することは可能ですか?
理想的には、ローカルマシンにbashスクリプトが必要です。データファイルを引数として指定すると、SSH接続、データ送信などがすべて実行され、結果がstdoutにローカルに出力されます。
私のローカルマシンはMacOS Xで、リモートはLinuxです。いいえ、LinuxバイナリをMac OSXで動作させることはできません。
更新:リモートマシン上のツールcan stdinから読み取ります。
ツールがstdin の代わりにテキストファイルを読み取り、stdoutを介してその出力を提供できる場合、このbash
構文は、ファイルをコピーすることなくリモートで実行する必要があります。
< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2'
注:一部のコマンドでは、stdinを読み取るために特別なオプションまたは引数(例:-
)が必要です。入力ファイルが指定されていないときにstdinを読み取るものもあります。私はあなたのツールについて何も知らないので、これはあなたが調整する必要があるかもしれない一般的なアプローチです。
>
または(ローカル)tee
を使用したローカルファイルへの出力のリダイレクトも同様に機能します。
< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2' | tee "/local_path/to/output_file"
例:remote cat
はローカルとリモートの/etc/hosts
を連結します:
< "/etc/hosts" ssh user@remote 'cat - /etc/hosts'