
2 つの bash プロセスが実行中です。名前を bash_1 と bash_2 として指定します。 bash_2のbash_1からコマンドを実行したいです。私はこれを達成するためにこのアプローチに従います。
bash_1からIOの開発ファイルを取得します。
vchandola@mininet-server:~$ echo $$
1097
vchandola@mininet-server:~$ ls -alh /proc/1097/fd
total 0
dr-x------ 2 vchandola vchandola 0 Jul 11 15:48 .
dr-xr-xr-x 9 vchandola vchandola 0 Jul 11 15:48 ..
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 0 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 1 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 15:48 2 -> /dev/pts/2
lrwx------ 1 vchandola vchandola 64 Jul 11 16:08 255 -> /dev/pts/2
bash_2 で次のコマンドを実行します。 bash_2でコマンドを実行します。 bash_1 で bash コマンドを実行します。
root@mininet-server:/home/vchandola# socat - /dev/pts/2
hello
ls
bash_2でこれらの応答を期待しましたが、私は見ませんでした。 bash_1では、両方の文字列が提供されますが、Enter /改行文字が期待どおりに読み込まれたり提供されたりしていないようです。これがbash_1で見たものです。
vchandola@mininet-server:~$ hello
ls
bash_1でhelloとlsコマンドが実行されないのはなぜですか? bash_1でhelloとlsを実行する方法は?
答え1
shell-1
2つのシェルがあり、次のものがある場合shell-2
:
(shell-1) $ who am i
user pts/0 ...
(shell-2) $ who am i
user pts/1 ...
それから書く関連文字デバイスの出力は、関連端末に印刷されます(ご覧のように):
(shell-2) $ echo hello > /dev/pts/0
$
(shell-1) $ hello
デバイスに書き込むことはshell-2
デバイスに書き込むことと変わりませんshell-1
。echo hello
で実行するとshell-1
、にも記録されます/dev/pts/0
が、記録されません。入力するそのシェルの場合、端末の「画面」に書き込まれます。
プロセスがシェルの標準入力ストリームに書き込むようにするには、他のメカニズム(パイプまたはfifoなど)を使用し、シェルを実行するプロセスでこれを設定する必要があります。