web-dev-qa-db-ja.com

疑似ttyのモック(pts)

cursesベースのアプリをバックグラウンドで実行したいと思います。

これらのアプリはcursesを使用し、現在のttyポート名を取得して、ログファイルやその他のコンテキスト端末の関連付けをマッピングするために内部的に使用されます。

一部のテストでは、キーボードを読み取らないcursesアプリからの入力を既知のptsにリダイレクトするだけで機能しました。そのためにtty(または疑似tty)を予約しているので、バックグラウンドで実行できます。

Ttyをモックすることは可能ですか、またはそのようないくつかの自動実行目的のために予約されたptsを持っていますか? crontabを介してそれらを起動することは明白です。

4
Luciano

ツールセットの歴史

この種のものの最も初期のツールは、ダニエルJ.バーンスタインの「pty」パッケージでした。リッチサルツはこれを「ギンスナイフ」と表現し、1990年代の変わり目にnethackで不正行為をするために書き戻しました(原文のまま)。 「pty」パッケージのバージョン4は、1992年にcomp.sources.unix(25巻127から135号)に発行されました。それはまだワールドワイドウェブ上で見つけることができます。ポール・ヴィクシーは当時それを説明しました:

何と言えばいい?スライスし、さいの目に切り、皿を洗い、犬を散歩させます。それは「正しく機能する」ということです。つまり、指示に従うと、髪を引っ張ったり、歯を噛んだり、その他の標準的な移植作業を行うことなく、機能するパッケージを入手できます。

バーンスタインは後に、1999年4月7日以前に、「ptyget」パッケージでこれを更新しました。

新しい疑似ttyアロケーターptygetをまとめました。アルファ版はftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gzにあります。 ptygetメーリングリストがあります。参加するには、空のメッセージを[email protected]に送信します。 ptygetのインターフェースを一から設計しました。 ptyよりもはるかにモジュール化されています。基本的なptyインターフェイスは3つに分割されました。

  • ptyget:新しい疑似ttyを割り当て、それを選択したプログラムに渡す、パッケージ内の唯一のsetuidプログラムである小さな低レベルプログラム。
  • ptyspawn:疑似ttyの下で子プロセスを実行し、終了するのを待って停止を監視する別の小さなプログラム
  • ptyio:データを前後に移動する別のわずかに大きいプログラム

古いギンスナイフptyのスペルはptybandageになりました。これは、ptyget ptyio -t ptyspawnの同義語です。ネットワークプログラムを疑似ttyにアタッチするためのpty -dは、ptyget ptyio ptyspawnの同義語であるptyrunのスペルになりました。 nobufptyget ptyio -r ptyspawn -23xの同義語です。セッション管理機能を別のパッケージに分割しました。

その別のパッケージは「sess」パッケージでした。

ちなみに、「ptyget」は、Berstein独自の未公開の「redo」ビルドシステムの非常に初期のバージョンであり、公開された数少ないインスタンスの1つを例示していることで注目に値します。 dependonredo-ifchangeの明確な前兆です。

利用可能なツールセット

Dru Nelsonは、「pty」バージョン4と「ptyget」の両方を公開しています。

Paul Jarcは、オペレーティングシステムが実際には提供しなくなったオリジナルのオペレーティングシステム固有の疑似端末デバイスioctlを処理しようとするptygetの修正バージョンを公開しています。

Noshソースパッケージには、LaurentBercotのptybandangeツールとnoshパッケージ独自の疑似端末管理コマンドを使用する同様のptyrunおよびexeclineスクリプトが付属しています。

いくつかの使用例

AIXでptybandageを使用するJurjgenOskam ヒアドキュメントからの入力を、明示的に開いて制御端末でパスワードを読み取るプログラムにフィードするプロンプト:

$ ptybandage dsmadmc << EOF> uit.txt 
 joskam 
 password 
クエリセッション
クエリプロセス
 quit 
 EOF

OpenBSDでptyrunを使用しているAndyBradford daemontoolsとucspi-tcpの下でbgplgshインタラクティブルーター制御プログラムにネットワーク経由でアクセスできるようにし、ターミナル:

#!/ bin/sh 
 exec 2>&1 
 exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun/usr/bin/bgplgsh

参考文献

2
JdeBP