web-dev-qa-db-ja.com

単純なコマンドラインツールが後続のデータを表示しないようにするための制御文字またはハックはありますか?

バイナリデータで混乱することが多いcat(およびおそらく単純なテキストエディタ)のようなコマンドラインツールによって、醜いデータが表示されないようにしたいと思います。たとえば、VT100端末がバイナリ出力によって誤って構成されることがあります。

<?php
// PHP code shown by text tools on the command line

__halt_compiler();

// here some fake EOF mark for simple text processing tools
// hidden ugly data

ファイルの終わり単純なストリームベースのテキストビューアツール、特にLinuxコマンドラインツール(ただし、一部のWindowsツール)になりすますことはできますか?

catなどを使用している他の人が画面にゴミを表示しないように、混合テキスト/バイナリファイル内から解決策を探しています。

3

1つの「解決策」は、多くの(すべてではない)端末がサポートする代替画面バッファーを使用することです。次のコマンドについて考えてみます。

printf "Hello, \e[?1049h ABCDEFG \e[?1049l World\n"

代替画面バッファをサポートする端末では、次のように表示されます。

Hello,  World!

おそらく端末の非常に突然のフラッシュで。

\e[?1049hシーケンスにより、端末は代替画面バッファーに切り替わり、その後に印刷されるすべてのものが終了します。 \e[?1049lシーケンスは、メイン画面バッファーに戻ります。

Phpの例:

<?php
echo "Hello";
// Nothing to see here...^[[?1049h
echo ", World!\n";
//^[[?1049l
?>

ここで、^[はエスケープ文字を表します。

代替画面バッファーは、端末のユーザーインターフェイスを作成したいが、閉じた後に端末の内容を復元したい多くのプログラムで使用されます。これは、lessがウィンドウ全体を使用してコンテンツを表示できる方法ですが、終了すると、前のコマンドはすべて表示されたままになります。 nbufferがインストールされている場合は、次のことを確認できます。

$ unbuffer less -f /dev/null | xxd
00000000: 1b5b 3f31 3034 3968 1b3d 0d0d 1b5b 4b1b  .[?1049h.=...[K.

ご覧のとおり、最初に出力されるのは\x1b[?1049hで、これにより端末は画面バッファーを切り替えます。

ほとんどのエディターは印刷できない文字を表示しようとしないため、これは(私が知っている)どのエディターでも機能しません。

5
Torin