24

Linuxに、stdin / stdoutがTTY(ターミナルデバイス)でない場合に実行を拒否するプログラムがあります。PTYを作成し、新しく作成したTTYでプログラムを起動し、すべてのデータをstdin / stdoutにコピーする使いやすいツールはありますか?

ユースケースはインタラクティブではありませんが、スクリプトです。私は最も軽量なソリューションを探しています。できればTCP接続を作成せず、他のツールやライブラリをインストールする必要がありません。

4

2 に答える 2

37

unbuffer、expectの一部(sudo apt-get install expect-devUbuntu Lucid)は、プログラムをだましてTTYに接続されていると思わせることができます。

$ tty 
/dev/pts/3
$ echo | tty 
not a tty
$ echo | unbuffer tty 
/dev/pts/11
于 2010-11-20T16:48:50.523 に答える
1

これに使用できますsocatecho your stdin strings | socat EXEC:"your_program",pty STDIO >/stdout_file

たとえばbashecho ls | socat EXEC:'bash',pty STDIO >/tmp/ls_out

または、ここで説明するようにdocker、 :で実行されるプログラムの場合

# Run the docker task, here bash, in background
docker run -it --rm --name test ubuntu &
# Send "ls -la" to the bash running inside docker
echo 'ls -la' | socat EXEC:'docker attach test',pty STDIN
# Show the result
docker logs test
于 2021-09-10T08:30:32.893 に答える