14

ある端末から別の端末にコマンドを書き込む必要があります。

私はこれらを試しました:

echo -e "ls\n" > /proc/pid/fd/0
echo -e "ls\n" > /dev/pts/4

as output を出力するだけで、ls実行されません。

私はこれらを試しました:

chmod 777 /dev/tty4 ;echo "ls" > /dev/tty4
chmod 777 /dev/tty40 ;echo "ls" > /dev/tty40

何もしないように見えるもの

何か案は?

[これを達成するために2番目の端末に触れたくないことに注意してください。最初のものだけ]

4

7 に答える 7

3

次のスクリプトを使用して、複数の端末でコマンドの出力を同時に表示することができます。また、エディターを含むすべてのコンソール プログラムで動作します。たとえば、次のようにします。

execmon.bash  'nano hello.txt' 5

エディターを開くと、ここで紹介する出力とテキストの両方が仮想端末番号 5 にリダイレクトされます。端末が表示されます。

ls /dev/pts

各仮想端末には関連付けられた番号があります。

通常のターミナル、konsole、および xterm で動作します。ファイル execmon.bash を作成して、これを配置するだけです。

#! / bin / bash
# execmon.bash
# Script to run a command in a terminal and display the output
# in the terminal used and an additional one.
param = $ #
if [$ param-eq 2]; Then
    echo $ 1 | tee a.out a.out && cat> / dev / pts / $ 2 && exec `cat` a.out | tee / dev / pts / $ 2 && rm a.out
else
    echo "Usage:"
    echo "execmon 'command' num '
    echo "-command is the command to run (you have to enter ')"
    echo "-num is the number of virtual console to output to the"
fi

例:

execmon.bash 'ls-l' 5
execmon.bash 'nano Hello.txt' 5
于 2012-04-29T22:24:52.103 に答える
2

これは毛むくじゃらです。使用しようとしている proc の stdin ファイルは、端末デバイス (おそらく /dev/pts/something) へのシンボリック リンクです。そのデバイスを開いている2 つのプロセスがあります: シェル (ターゲット) とターミナル エミュレーター (例: gnome-terminal) で、ソケットのように使用して双方向にデータを渡します。おそらく後者は出力を盗んで表示しているため、シェルはそれを認識しません。このテクニックは通用しないと思います。

何を達成しようとしていますか?popen() のような従来のツールを使用してプロセスを子として実行することはできませんか? GUI ターミナル エミュレーターの場合は、X イベントまたはカーネルの uinput API を介してキーボード入力を偽造することができます。

于 2012-04-29T21:54:57.040 に答える
1

2 つの端末を開き、書き込みたい端末で ttd と入力します。ttd で端末のアドレスが表示されます。別の端末に移動し、cat > (2 番目の端末のアドレス) と入力して Enter キーを押します。

于 2014-09-20T11:42:11.087 に答える
0

これは間違った方法です。端末に表示されても実行されない可能性があります。

名前付きパイプまたは netcat/socat から読み取るようにシェルに指示するようなことをする必要があります。または、キーストロークを root として注入するか、xtest を使用することもできます (私が忘れている X の下に別の方法がある場合もあります)。

于 2012-04-29T21:54:16.233 に答える
-1

command > dev/pts/# ここで # は他の端末の名前です

于 2014-11-26T15:04:11.677 に答える