ターミナル(xterm)を開いてbashを起動してプロンプトを表示している。この実行中のbashのPIDと、この端末に関連付けられているttyを知っているとします。このターミナルに全く触れない方法はありますか?ttyとpidの情報だけを使用して、この非常に実行中のbashにコマンドを実行するよう求めます。 Naively echo "command"> ttyは端末にコマンドを表示しますが、bashはそれをユーザー入力として受け取っていません。実行中のbash(対話型)に外部からコマンドを実行するように依頼する
2
A
答えて
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
は、スクリーンへの(全二重)エコーを停止するだけです。
注意:技術的には、これは明示的に「キー押しをシミュレート」していません。
関連する問題