「tty」の出力が「/dev/pts/2」である端末があるとしましょう。別の端末から、最初の端末にコマンドを送信して実行したいとします。使用: echo "ls" > "/dev/pts/2" 最初の端末に "ls" のみを出力する 文字列を実行する方法はありますか?
5 に答える
いいえ; 端末はコマンドを実行しません。それらは単なるデータのチャネルです。
ただし、次のように、コマンドを実行して別の端末にアタッチすることができます。
ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2
ただし、そのデバイスが制御端末として設定されていないため、その端末から実行したのとまったく同じようには動作しません。かなり近いですけどね。
1年遅れだと思いますが、もっと簡単な方法があると思います。これは機能しませんか?
ls > /dev/pts/2
それは私のシステムで動作します。
通常、tty からコマンドを実行するには、getty、login、および shell プログラムが必要です。
ただし、疑似端末からコマンドを直接実行するシェルを配置することもできます。これは単純化された例です (すべてのエラー チェックが削除されています)。
int main( int argc, char** argv )
{
int master_fd = create_my_own_psudo_terminal() ;
// Wait until someone open the tty
fd_set fd_rset;
FD_ZERO( &fd_rset );
FD_SET( master_fd, &fd_rset );
select( master_fd + 1, &fd_rset, NULL, NULL, NULL );
dup2( master_fd, STDIN_FILENO );
execl("/bin/sh", "sh", 0 );
return 0;
}
これで、次のことができます。
最初のターミナルでこの簡単なプログラムを開始します。
そして、2 番目の端末からコマンドを送信します。
echo "ls" > /dev/pts/5
そして、最初のターミナルにリストが表示されます。
注: ログインが行われないため、これは非常に安全ではありません。
試す
echo `ls`
異なる引用記号に注意してください。
/bin/sh > /dev/pts/5 を実行して pty にシェルを取得してから、他のコマンドを実行できます。真のシェル機能が必要な場合は、マスター pty を読み取ってその内容を出力するスレッドを (C プログラムで、openpty コマンドなどを使用して) 実装することができます。