また、「$TERM
」とは言わないでくださいxterm
。常にそうです。
bash
スクリプトは、どの端末で実行されているか、具体的にはiTerm、Terminal.app、または実際にxtermであるかをどのように確認できますか?
reset
Terminal.appとiTerm2でそのままでは機能しないのでお願いします。ただし、iTerm2はターミナルリセット(\x1b]50;ClearScrollback\x07
)を実行するためのエスケープシーケンスを認識し、それを検出できた場合reset
は、正しいことを行うエイリアスでオーバーライドできます。AFAICT、Terminal.appにはリセットシーケンスがなく、人々はとんでもないtom-hackeryを使ってハッキングします。
ここでの私の最終目標はreset
、OS XとLinuxのどちらで作業していても、SSHを介してローカルでもリモートでも同じように作業することです。(私はどちらを覚えようとする必要はありません。そうすることは有用でありreset && command-that-outputs-a-bunch
、上手に作業することができます。)Terminal.appとiTermは、reset
正しく実装されていないため、この計画でレンチを投げています。
つまり、単にオーバーライドするだけでreset
は十分ではありません。Linuxマシンを使用しているgnome-terminal
場合、正しいエスケープシーケンスを送信するには、使用しているのがiTerm かを知る必要があります。
ioctl
端末が本当に何であるかを尋ねる方法はありますか?
thisこの質問の目的のために、リセットは画面をクリアし、カーソルをリセットして、スクロールバックバッファーをワイプする必要があります。
reset
私の指が知っているからです。
reset
コマンドがターミナルエミュレータのスクロールバックコンテンツをクリアすることを期待していますが、それが保証されるわけではありません。スクロールバックはターミナルエミュレータ固有の機能であり、実際には端末の一部。ただし、ターミナルはスクロールバックを消去するためにED(ディスプレイ内消去)エスケープシーケンスの拡張をサポートしていESC [ 3 J
ます。画面をクリアして、それを使用できます。たとえば、reset && printf '\e[3J’
xterm
(を介してTERM=xterm
)であると宣言した場合は、リセット時にスクロールバックをクリアするXTermのスーパーセットをエミュレートすると思います。(まるで「青」のエスケープシーケンスを送信したかのように、青を期待します)確かに、私のxtermはErase is backspace.
それを教えてくれます。それはただ迷惑です。
Terminal.app
の設定、ターミナルタブを開き、スクロールバック行を0に設定するとどうなりますか?現在の行の上にあるテキスト、または画面の上部にあるテキストをすべて無効にしますか?私が知っている、それはあなたが要求したものと正確には同じではない、一撃の価値がある。