Edスクリプトはゆっくりと入力した場合にのみ機能します。

Edスクリプトはゆっくりと入力した場合にのみ機能します。

存在するこの文脈ed file < script印刷してエラー2で終了する状況が発生しましたが、一度に?コマンドを入力または貼り付けるのがうまくいきました。これは、1行の間scriptに1行ずつファイルを渡すシェルプロセスがある場合でもうまく機能します。したがって、コマンドが不快な時に表示された場合、私のバージョン(MacOS 10.12のバージョン)に問題があるsleepようです。ed

  1. なぜedは、受信したコマンドを処理する準備が整うまで標準入力の読み取りを避けないのですか?それとも私が状況を間違って理解したのでしょうか?

  2. エラーメッセージは?あまり役に立ちません。hマニュアルページによれば、対話型セッションでエラーメッセージを入力するために入力できます。ただし、入力がTTY以外の場所から来るとすぐに終了します。この場合でもエラーメッセージを受け取る方法はありますか?

  3. これは既知の問題ですか?それでは、コマンドをゆっくり渡す以外に提案された回避策はありますか?どのバージョンのEDが影響を受けますか?

ベストアンサー1

スクリプトのキャリッジリターンが原因で問題が発生する可能性がありますed。テキストの一部をコピーして貼り付けても実行中のedプロセスに転送されるわけではありませんが、スクリプトファイルにあった場合、これがどのようにed混乱する可能性があるかを理解できます。

GNU は、ed「入力ファイルが破損しているか無効であることを示す」の終了状態 2 で終了します。これは、DOS形式のスクリプトファイルである可能性があるという推測をサポートします。ただし、edmacOSのデフォルトはBSDで、ed終了コードはドキュメントに正しく記載されていません。 (OpenBSD)ソースコードを見ると、この終了コードを引き起こすエラーのほとんどは、実際にはスクリプトファイルの読み取りに関連しているようです。

各改行の前の内容を削除するには\r(内部編集を実行します):

printf '%s\n' ',s/\r$//' 'wq' | ed -s file

たとえば、WindowsエディタまたはファイルをDOS形式のテキストファイルとして保存するエディタでスクリプトを作成すると、キャリッジリターンが表示されます。

質問1:私はそれが本当であると確信しています。

ed問題2は、生成されたやや簡潔な診断メッセージ(?ほとんどの場合)に関連しています。この関数を呼び出して編集スクリプトを起動すると、エラーの後に入力したように、Hすべてのエラーが一般的なエラーではなく詳細情報として表示されます。各行の末尾にキャリッジリターンがあると、コマンドは有効であると認識されず、役に立ちません。?hedH

質問3:私はOpenBSDでGNU ed(1.14.2)とBSDを使用していましたが、「早すぎる」コマンドを入力して発生する問題をed見たことがありません。ed

おすすめ記事