Linux / コマンド / clear - ターミナル画面の整理
clearは、ターミナル画面を消して作業スペースを整理するコマンドです。一般的なncursesの実装では、現在の画面だけでなく、ターミナルが対応している場合スクロールバックバッファも消去しようと試みますが、-xオプションを使用すればスクロールバックの消去を要求しないようにできます。実際の表示は端末の実装にも依存します。
clearは、コマンド履歴やファイルを削除することはありません。画面表示だけを変更するため、以前のコマンドは通常シェルの履歴機能で再確認できます。操作方法と保存範囲は Bash の history によるコマンド履歴の確認で説明しています。
clearコマンドとは?
clearはTERM環境変数でターミナルの種類を確認し、terminfoデータベースの機能情報を利用して適切な制御シーケンスを出力します。したがって、単に空行を何度も出力するのとは異なり、ターミナルの種類や実装によって詳細な動作が異なる場合があります。
この記事のオプション説明は、Linuxで広く使われているncursesのclearを基準としています。
基本的な文法
clear [-x] [-T ターミナルの種類]
clear -V
最も一般的な使い方は、オプションなしで実行することです。
clear
clearが消すものと消さないもの
| 対象 | 動作 |
|---|---|
| 現在のターミナル画面 | 画面を消去してカーソルを初期位置に移動します。 |
| スクロールバックバッファ | 端末とncursesが関連する機能をサポートしていれば、基本実行で消去を試みます。-xでこの動作を防ぐことができます。 |
| シェルコマンドの履歴 | 削除されません。historyや上向き矢印キーで再確認できます。 |
| コマンドの出力元 | ログファイルやコマンドが作成したデータには影響を与えません。 |
| シェル変数と現在のディレクトリ | 変更しません。 |
スクロールバックを残す -x
clear -x
-xは画面は消しますが、スクロールバックバッファを消そうとはしません。画面を整理した後、以前の出力にスクロールして戻る必要がある場合に便利です。
このオプションはncurses clearの機能です。他のOSや実装ではサポートされていない場合があるため、clear -Vまたは対応するシステムのマニュアルを確認してください。
端末の種類を指定する -T
clear -T xterm-256color
通常、clearはTERM環境変数から端末の種類を自動的に取得するため、-Tは必要ありません。端末検出の問題を診断したり、特定の種類に対応した制御シーケンスを生成する場合にのみ明示的に使用します。
printf '%s\n' "$TERM"
infocmp "$TERM"
実際の端末と異なる種類を指定すると、画面が予期せず消去されたり、制御文字が表示されることがあります。
オプションまとめ
| オプション | 説明 |
|---|---|
-x |
スクロールバックバッファを消去する動作を省略します。 |
-T 種類 |
TERMの代わりに指定したターミナル種類の機能情報を使用します。 |
-V |
このプログラムに関連付けられた ncurses のバージョンを出力して終了します。 |
Ctrl+Lとclearの違い
Bash の行編集ライブラリ Readline の基本キー設定ではCtrl+Lは画面を再描画して現在の入力行を上に移動させる役割を果たします。画面だけを素早く整理する際に便利ですが、ターミナルのスクロールバック処理方式がclearと同じであると保証することはできません。
| 方法 | 利点 | 特徴 |
|---|---|---|
clear |
ターミナル機能情報を使用し、オプションを選択できます。 | 実装によってはスクロールバックまで消去することができます。 |
clear -x |
画面を整理しながら以前の出力に戻りやすいです。 | ncurses の実装のオプションです。 |
Ctrl+L |
入力中にキーボードで素早く実行できます。 | シェルの行編集設定や端末によって動作が異なることがあります。 |
clear と reset の違い
clear は正常に動作する端末の画面を整理するために使用します。一方、reset はバイナリ出力や誤った制御シーケンスで文字表示、入力モード、または改行が壊れたときに端末の状態を再初期化する用途です。
reset
表示を整理したいだけなら clear を使い、入力した文字が見えない場合や表示モードが壊れた場合には reset がより適しています。
tput で画面を消す
tputはterminfoデータベースを使用して端末の機能を出力することができます。
tput clear
シェルスクリプトで端末制御機能を組み合わせる際に便利です。ただし、出力をファイルやパイプに送る非対話的作業では、制御シーケンスが不要なデータとして残ることがあるため、端末への接続の有無を確認することが望ましいです。
スクリプトで使用する場合
ダッシュボードのように画面を繰り返し更新する対話型プログラムでない限り、スクリプトがユーザーの画面を任意に消去しないほうがよいです。エラーメッセージと以前の結果を比較しづらくなり、ログ収集環境では制御文字が混ざる可能性があるためです。
if test -t 1; then
clear
fi
test -t 1は標準出力が端末に接続されているか確認します。画面更新が目的であれば、watch による定期的な結果表示や、目的に合った端末 UI ツールの使用も検討してください。
エラー解決
TERM environment variable not set
TERMが設定されていない場合や、異常な非対話的環境で実行した場合に発生することがあります。
printf '%s\n' "$TERM"
実際の端末種類を知らずに任意の値を指定するよりも、SSH、コンテナ、または作業実行環境がTERMを渡すように構成するほうがよいです。
unknown terminal type
TERM の値に対応する terminfo エントリがシステムに存在しない可能性があります。infocmp "$TERM" で確認し、必要なターミナル情報パッケージをインストールするか、クライアントが互換性のある値を送信するように設定してください。
clear 後でも以前の出力が表示されます。
ターミナルエミュレーターがスクロールバック削除機能をサポートしていないか、使用中の clear 実装が画面のみを消去できる場合があります。これはコマンド履歴が削除されていないこととは別です。
よくある質問
clear を実行すると history も削除されますか?
いいえ。clear はターミナル表示を変更するだけで、Bash のコマンド履歴は削除しません。履歴の削除は history の別機能と設定によって処理されます。
スクロールバックを維持しながら画面だけを消去できますか?
ncurses の実装では clear -x を使用できます。システムの実装が該当オプションをサポートしているか確認してください。
clear がファイルを削除するリスクはありますか?
通常の clear コマンドは、ターミナル制御シーケンスを出力するだけで、ファイルを削除することはありません。ただし、同じ名前のエイリアスや関数が再定義されている場合があるため、疑わしい場合は type -a clear で確認してください。




