私が読んでいる」UNIX時間共有システムDennis M. RitchieとKen Thompson論文と標準入力/出力リダイレクトの例として、edエディタの例を提供します。
このコマンドは
ed <script
スクリプトをエディタのコマンドファイルとして解釈するため、「」は「<script
」から入力を受け取ることを意味しますscript
。
しかし、vimを使用して同じ操作を試みると、「入力の読み込み中にエラーが発生しました」というエラーメッセージが表示されます。
[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
なぜですか?
答え1
ed
そしてex
ラインエディタ。テキストファイルの行で駆動できるユーザーインターフェイスがあります。
vi
VIMなどのすべてのクローンフルスクリーンエディタ。ユーザーインターフェイスは、入力と出力をテキストファイルラインとして扱いません。入力は、単一の文字と行にグループ化されていない一連の文字です。出力は、ビデオ端末に描画するための単一文字とエスケープと制御シーケンスです。
モデルは次のとおりですユーザー入力/出力これは、テキストファイルがGUIプログラムだけでなく、インタラクティブフルスクリーンTUIプログラムにもマッピングされていないためです。
あなたが得る行動はプログラムによって異なります。一部のフルスクリーンTUIプログラムは、標準入力が端末ではないことを認識し、nvi
このように中断します。 VIM などの他のツールは警告しますが、端末以外の入力ファイルを端末入力として扱うため、入力をスクリプト コマンドで処理したい人には奇妙な動作が発生する可能性があります。たとえば、他のものはless
ユーザーインターフェイス用に端末デバイスを明示的に開き、標準I / O(入力部分)を使用しません。ほとんどのシェルのように、非対話型モードに切り替えられるいくつかのシェルもあります(対話型ユーザーインターフェイスは単純なラインモードではありません)。
1974年に作成されたUnix関連の論文は、ラインモードユーザーインターフェースとフルスクリーンユーザーインターフェースの違いを説明する良いガイドラインではありません。 George Coulourisの最初のビデオ端末Unixエディタは、em
おそらく1年後に登場したでしょう。将来的には、独自のコマンドライン編集機能を備えたシェルであるtermcapと、グラフィックではなく特殊文字を使用する行ルールのデフォルトもあります。