いくつかのアプリケーションと、Solarisの名前付きパイプに出力を送信する標準のUnixツールがありますが、名前付きパイプはローカルストレージ(Solaris上)からしか読み取ることができないため、ネットワーク経由でアクセスしたり、パイプを配置したりすることはできません。出力へのネットワークアクセス用のNFSストレージ。
コマンドラインツールの出力をソケットに直接転送する類似の方法があるかどうか疑問に思いました。たとえば、次のように言います。
mksocket mysocket:12345
vmstat 1 > mysocket 2>&1
Netcat これには最適です。これが いくつかの一般的な例のあるページ です。
ケースの使用法は次のようになります。
サーバーは接続をリッスンし、出力を送信します。
server$ my_script | nc -l 7777
リモートクライアントは、ポート7777でserver
に接続し、データを受信し、ログファイルに保存します。
client$ nc server 7777 >> /var/log/archive
netcat
(nc
とも呼ばれます)はまさにあなたが探しているものです。かなり標準的になりつつありますが、すべてのシステムで利用できるわけではありません。
socat
は、より多くの機能を備えたnetcatの強化バージョンのようですが、あまり一般的ではありません。
Linuxでは、/dev/tcp/<Host>/<port>
を使用することもできます。詳細については、 Advanced Bash-Scripting Guide を参照してください。
netcatは、ネットワーク上でパイプを確立するのに役立ちます。
次のいずれかを使用することをお勧めします。
vmstat 2>&1 | ssh -i private.key [email protected] "cat >vmstat.out"
誰もがnetcatで正しい方向に進んでいます。ただし、nc
にパイプして応答を期待している場合は、-q <seconds>
オプションを使用する必要があることを付け加えておきます。マニュアルから:
-q秒
stdinでEOFの後に、指定された秒数だけ待ってから終了します。秒が負の場合は、永久に待ちます。
たとえば、SSHエージェントと対話する場合は、次のようにすることができます。
echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings
より完全な例は https://Gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4
*私はこれを https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html から盗みました