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

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

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他の人が使用したり、類似のファイルを使用したりすると、画面にゴミが表示されないように、混合テキスト/バイナリファイルでソリューションを探しています。

答え1

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
?>

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

代替画面バッファはターミナルユーザーインターフェイスを作成したいが、閉じた後にターミナルコンテンツを復元したい多くのプログラムで使用されます。それだけです。少ないウィンドウ全体を使用してコンテンツを表示できますが、終了後も前のコマンドはすべて表示され続けます。お持ちの場合バッファリング解除インストール後、次のことを確認できます。

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

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

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

関連情報