データをプッシュするTIOCSTIを使用しています。端末入力バッファ。データがシェルに到達する前にキャプチャまたはファイルにリダイレクトできるようにしたいです。
私がやろうとしていることをよりよく説明するには:
gcc -x c -o pusher.bin - <<PUSHER
#include <unistd.h>
#include <sys/ioctl.h>
#include <termios.h>
int main() {
char *c = "echo 'Catch me if you can'\n";
while(*c) ioctl(0, TIOCSTI, c++);
}
PUSHER
./pusher.bin
私の端末で実行すると、私のttyが./pusher.bin
挿入され、echo 'Catch me if you can'\n
私のシェルはすぐに実行されます。実行すると、setsid ./pusher.bin
echoは端末に注入されませんが、キャッチできません。
./pusher.bin
ベアメタルを実行している場合は、プッシャーが私のtty入力バッファに何を注入するかを確認できるように何かで仕上げたいと思います。
言う:私は注入された入力がシェルの標準入力に達した後にキャプチャすることができることを知っています。このアプローチは挿入された入力をキャプチャするのに効果的ですが、通常のユーザー入力もキャプチャできます。また、stdinが閉じられている場合、またはプロセスがttyに接続されていない場合、この方法は機能しません。これらの欠点だけでは、stdinキャプチャは一般的な解決策として実行できなくなります。
ベストアンサー1
ABが述べたように、これがscript
解決策のようです。-e
プログラムの戻りコードも取得できます。キャリッジリターンとラインフィードをcat -vet
より明示的に表示します。^M
$
$ script -q -e out -c ./pusher.bin >/dev/null; echo $?
0
$ cat -vet out
Script started on Mon Dec 21 10:54:40 2020$
echo 'Catch me if you can'^M$