Linuxに、stdin / stdoutがTTY(ターミナルデバイス)でない場合に実行を拒否するプログラムがあります。PTYを作成し、新しく作成したTTYでプログラムを起動し、すべてのデータをstdin / stdoutにコピーする使いやすいツールはありますか?
ユースケースはインタラクティブではありませんが、スクリプトです。私は最も軽量なソリューションを探しています。できればTCP接続を作成せず、他のツールやライブラリをインストールする必要がありません。
unbuffer
、expectの一部(sudo apt-get install expect-dev
Ubuntu Lucid)は、プログラムをだましてTTYに接続されていると思わせることができます。
$ tty
/dev/pts/3
$ echo | tty
not a tty
$ echo | unbuffer tty
/dev/pts/11
これに使用できますsocat
:echo your stdin strings | socat EXEC:"your_program",pty STDIO >/stdout_file
たとえばbash
:echo 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