2011-09-10 11 views
2

ターミナル(xterm)を開いてbashを起動してプロンプトを表示している。この実行中のbashのPIDと、この端末に関連付けられているttyを知っているとします。このターミナルに全く触れない方法はありますか?ttyとpidの情報だけを使用して、この非常に実行中のbashにコマンドを実行するよう求めます。 Naively echo "command"> ttyは端末にコマンドを表示しますが、bashはそれをユーザー入力として受け取っていません。実行中のbash(対話型)に外部からコマンドを実行するように依頼する

答えて

4

TIOCSTI ioctlを使用してください。 Cの例:

char* cmd="ls\n"; 
int fd = open (ptsname, O_RDWR); 

while (*cmd) 
{ 
    ioctl(fd, TIOCSTI, cmd++); 
} 
0

は(2017)は、以下のスクリプトまたはコマンドラインから実用的である:

stty -echo; perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' `_cmds_` ;stty echo; _app_ 

あなたが最終アプリをドロップするとCMDSの出力が上に存在します(カーネル内で呼び出される)入力キュー、現在のコンソールシェル、またはコマンドラインで実行されているアプリケーションのいずれかに格納されます。 sttyは、スクリーンへの(全二重)エコーを停止するだけです。

注意:技術的には、これは明示的に「キー押しをシミュレート」していません。

関連する問題