ツールセットの歴史

ツールセットの歴史

出力が端末に渡されたときに動作を変更するコマンド(カラー出力の生成など)が与えられた場合、変更された動作を維持しながらパイプラインからその出力をどのようにリダイレクトできますか?私が知らないユーティリティがあるでしょう。

一部のコマンド(例grep --color=always:)には動作を強制するオプションフラグがありますが、問題は出力ファイル記述子テストにのみ依存するプログラムでこれを解決する方法です。

重要な場合、私のシェルはbashLinuxにあります。

ベストアンサー1

ツールセットの歴史

このようなツールが欲しい人はあなたが初めてではありません。人々は30年間このような道具を求めてきました。その人々もかなり長い間周りにいました。

この種の仕事のための最初のツールは、Rich Salzが「Ginsuナイフ」と描写したDaniel J. Bernsteinの「pty」パッケージでした。 Bernsteinは1990年代初めにネットハックをだますために書いた(sic!)。 「pty」パッケージのバージョン4は1992年にリリースされましたcomp.sources.unix(Volume 25、Issues 127-135)。 World Wide Webではまだ見つかります。 Paul Vixieは当時こう説明しました。

私は何と言うことができますか?切って、カチカチ切って、皿洗いし、犬散歩させることです。これは「ただ働きます」。言い換えれば、指示に従うと、髪を引っ張ったり、挽いたり、他の標準的な移植活動なしで機能するパッケージを入手したりすることができます。

Bernsteinは、後で「ptyget」パッケージを使用して1999年4月7日以前にそれを更新し、次のように発表しました。

私は新しいpseudo-ttyアロケータptygetを組み立てました。アルファ版はで利用可能ですftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz。参加するには、ptygetメーリングリストがあります。に空のメッセージを送信してください [email protected]。私はptygetのインターフェースを最初からデザインしました。 ptyよりもモジュール化されています。デフォルトのptyインタフェースは3つの部分に分けられます。

  • ptyget:新しいpseudo-ttyを割り当て、それを選択したプログラムに渡す小さな低レベルプログラム(パッケージ内の唯一のsetuidプログラム)
  • ptyspawn:擬似端末で子プロセスを実行し、子プロセスが終了するのを待って停止状況を観察するもう1つの小さなプログラムです。
  • ptyio:データを前後に移動するもう少し大きな別のプログラム

古い "Ginsu"ナイフはpty"Ginsu ptybandage"と表記されていますptyget ptyio -t ptyspawn。これはネットワークプログラムをpseudo-ttyに接続するために使用され、今では「Ginsu」とpty -d表記されています。そしての同義語です。セッション管理機能を別々のパッケージに分割しました。ptyrunptyget ptyio ptyspawnnobufptyget ptyio -r ptyspawn -23x

別のパッケージは「sess」パッケージです。

ちなみに、「ptyget」は、出版された数少ないケースの1つであるBersteinのまだリリースされていない「リワークされた」ビルドシステムの初期バージョンを示すことで有名です。 dependonそれは明らかな信号ですredo-ifchange

使用法

ptybandage

ptybandage人々は通常ログインセッションで欲しいものです。主なユースケースは、標準の入力、出力、またはエラーが実際にシェルパイプにある場合でも、この方法で実行されている端末に接続されているかどうかに敏感なプログラムを持つか、標準のファイル記述子をファイルにリダイレクトすることです。 。

実行するにはコマンドが必要であり(もちろん、適切な外部コマンドである必要があります)、標準入力、出力、およびエラーが端末に接続されていると思うように元の標準入力ptybandageに接続して実行します。 、出力およびエラー。

これにより、ジョブ制御シェルで実行される微妙な違いが処理され、ターミナルSTOP文字が停止するだけでなく、ptybandage実行中の内部ターミナルに接続されているプログラムも停止します。

ptyrun

ptyrun人々は通常TCP Webサーバーで欲しいものです。主なユースケースは、端末が独自に設定されておらず、端末なしで期待どおりに実行されないプログラムを実行するリモート実行環境です。

ジョブ制御シェルで実行されることは予期されておらず、実行中のコマンドが停止信号を受信すると、単に再起動されます。

利用可能なツールセット

Dru Nelsonは「pty」と「ptyget」のバージョン4をリリースしました。

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

nosh ソースパッケージには、Laurent Bercot のツールと nosh パッケージの独自の疑似端末管理コマンドを使用する同様のタスクとptybandangeスクリプトが付属しています。 nosh バージョン 1.23 以降、nosh-terminal-extras パッケージに事前パッケージされて提供されます。 (以前のバージョンではソースからビルドする人だけが利用できました。)ptyrunexecline

いくつかの例は次のとおりです。

ptybandageAIXのJurjgen Oskamパスワードプロンプトの制御端末を明示的に開いて読み取るプログラムにこの文書の入力を提供します。

$ptybandage dsmadmc <<EOF>uit.txt
ヨスカム
パスワード
クエリセッション
クエリプロセス
辞める
EOF

ptyrunOpenBSDのアンディ・ブラッドフォードdaemontoolsとucspi-tcpで、bgplgsh対話型ルーター制御プログラムが端末と通信していると考えながらネットワーク経由でアクセスできるようにします。

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

追加読書

おすすめ記事