プロセスの標準入力と標準出力にアクセスする方法を理解しようとしています。
SSH経由でのみアクセスできるリモートコンピュータがあり、バックグラウンドでターミナルベースのプログラムを実行したいと思います。つまり、SSH接続を閉じることができるように、SSH端末を介して分離モードでプログラムを起動します。
このプログラムには、標準入力および出力から標準出力へのユーザー入力を受信する独自の端末ベースのインターフェースがあります。
私の質問は、リモートシステムの他の端末がアクセスできるようにstdin / stdoutをどのようにパイプしますか?つまり、新しいSSH端末を開き、分離したプログラムに簡単にアクセスします。
それとも、入力/出力をパイプしてSSHを介してローカルコンピュータにトンネリングし、同じ方法で使用できるようにするにはどうすればよいですか?
screen
古すぎてアップグレードできないため、効果を得るためにリモートシステムでは使用できません。どちらもインストールされていませんtmux
。
ただし、両方のプログラムがローカルシステムからアクセスできるため、ある種のトンネリングが可能な場合は問題を解決できます。
答え1
これを行うより良い方法がありますが、mkfifo
2つのFIFOファイルを生成し、プログラムの入力と出力を2つのFIFOファイルにリダイレクトするようにコマンド/スクリプトを実行できます。
したがって、コマンドを実行して両方のファイルを生成した後(そしてSSH接続を閉じた後)、プロセスに入力を送信する準備ができたら、SSHを使用して送信したいすべての入力を単にエコーできます。FIFOファイル入力その後、実行中のプロセスにリダイレクトされます。
その後、出力は出力FIFOに送信され、アクセスの準備ができたらそれにアクセスする必要があるすべてのプログラムが出力を1行ずつ読み取ることができます。
公平に警告します。私は今コンピュータの前にいないので、これは完全に正確ではないかもしれません。私は、FIFOまたは一般的な古い一時ファイルが当面の作業に適したツールであるかどうかについてよく混乱します。一時ファイルを生成するには、入力およびリダイレクト出力にFIFOが必要mktemp
ですが、最終的な解決策は少なくとも上記のものと多少似ていると思います。つまり、いくつかのリダイレクト魔法です。
頑張ってください!他の方がもっと具体的な回答をいただければ幸いです。