【Linux】manコマンドで終了前の画面がクリアされないようにする

#はじめに
Linuxの`man`コマンドを利用時に、終了前の画面がクリアされないようにする方法の一つを紹介する記事です。

##環境

```
$ uname -rs
Linux 3.10.0-1160.31.1.el7.x86_64
$cat /etc/centos-release
CentOS Linux release 7.9.2009(Core)
$
$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
〜以下略〜
```

#`man`コマンドで困ったこと
`man`コマンドは、あらゆるコマンドの引数の取り方やオプションについて説明があり、大変有用なコマンドです。
皆さんも日々お世話になっているかと思います。

そんな`man`コマンドですが、私は以前から一点不満がありました。
それは、`q`で終了した際に、終了前の画面がクリアされてしまうという点です。

例えば、`sl`コマンドについてオプションを調べたいとします。

```
$ man sl
```

とすると、以下のようにマニュアルページが展開されます。

```
SL(1)                                                                                                  SL(1)

NAME
       sl - cure your bad habit of mistyping

SYNOPSIS
       sl [ -alFc ]

DESCRIPTION
       sl is a highly advanced animation program for curing your bad habit of mistyping.

       -a     An accident is occurring. People cry for help.

       -l     Little version

       -F     It flies like the galaxy express 999.

       -c     C51 appears instead of D51.

SEE ALSO
       ls(1)

BUGS
       It sometimes lists directory contents.

AUTHOR
       Toyoda Masashi (mtoyoda@acm.org)

                                               March 31, 2014                                          SL(1)
```

このマニュアルを見て、次のように思ったとしましょう。

「なるほど、`-a`や`-F`といったオプションがあるのか...ここに書いてあるオプション全部つけて実行したらどうなるかな？」

思ったら即実行！ということで、`q`でマニュアルを閉じ、オプションを全部つけて実行しようとしました。
しかし、勢いよく打ち始めたはいいものの、途中で手が止まってしまいます。

「`-a`と`-l`と......あれ、次は`-f`だったかな`-F`だったかな...？」
「４つあったはずだけど、最後のオプションってなんだったっけ？」

このようになってしまったのは、マニュアルを`q`で閉じた際にマニュアルの画面がクリアされて、次のようになってしまっているからです。

```
$ man sl
$
```

画面上にさっきのマニュアルページの内容が残ってくれていると、迷わずコマンドが打てたはずです。

#クリアされないように、環境変数`MANPAGER`を変更する
さて、前述のような悩みを解決するために今回紹介するのは、環境変数`MANPAGER`を変更するという方法です。

結論から述べると、以下のようにすると`man`コマンドの終了前の画面が残るようになります。

```
$ export MANPAGER="/usr/bin/less -X"
```

`MANPAGER`とは、その名の通り、`man`コマンド使用時に利用されるページャを設定する環境変数です。
デフォルトでは`/usr/bin/less`となっています。（`man`のマニュアルに記載されています）
つまり、`man`コマンドはデフォルトで`less`コマンドに何もオプションをつけないで実行した時と同じ画面表示を行います。

上記の環境変数設定は、`less`のデフォルトの挙動に画面をクリアしないオプション（`-X`）をつける設定となり、これを`man`コマンドで利用されるようにしています。

この設定により、`man sl`から`q`でマニュアルを閉じるまでの画面が、以下のように変わります。

```
$ man sl
SL(1)                                                                                                  SL(1)

NAME
       sl - cure your bad habit of mistyping

SYNOPSIS
       sl [ -alFc ]

DESCRIPTION
       sl is a highly advanced animation program for curing your bad habit of mistyping.

       -a     An accident is occurring. People cry for help.

       -l     Little version

       -F     It flies like the galaxy express 999.

       -c     C51 appears instead of D51.

SEE ALSO
       ls(1)

BUGS
       It sometimes lists directory contents.

AUTHOR
       Toyoda Masashi (mtoyoda@acm.org)

                                               March 31, 2014                                          SL(1)
$
//↑画面上に終了前のマニュアルの内容が残った状態でプロンプトが表示される
```

次のコマンドを打つ画面上に、マニュアル画面がクリアされないまま残っています。
これで、先程のようにオプションで迷うことなくコマンドが打てますね。

晴れて`sl`にオプションをフルでつけて実行させることができました。
![F5EBE848-95BF-44CA-9D71-47C00F839851.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1731510/9d74dba9-4fea-be4d-bd6b-ac0c62797eb6.jpeg)

#最後に
以上、manコマンドで終了前の画面がクリアされないようにする方法でした。
他にも方法はあるようですが、一旦はこの方法で問題ないかなと思います。

最後にもう一度設定を掲載しておきます。

```
$ export MANPAGER="/usr/bin/less -X"
```

お役に立てれば幸いです。