0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

接続元によるLinuxのless終了時の挙動

Last updated at Posted at 2020-04-04

疑問

新しいLinuxの教科書」という本でLinux入門をしてみたところ、一部教科書通りにいかず、調べても出てこなかったので、備忘録的なものとして残します。
具体的にはChapter08-04の「exportコマンド」の使用例のところです。
この章では環境変数「LESS」に対して「--no-init」を設定し、lessコマンドの挙動変化を確認する(終了時に画面クリアしていたものが、画面クリアしなくなるようにする)というものなのですが、Hyper-Vから接続し操作をしていたところ、特に設定を変更しなくても画面クリアされない挙動をしており、なぜ教科書通りにならないのかわかりませんでした。
(aliasも確認しましたがlessに対しては設定なし)
なので初学者ですが、できる範囲で何が原因なのか調べてみました。

調べてみた挙動

Linux上での(Hyper-Vからアクセスしたときの)動作(less /etc/crontab→qで終了)

linux-min.gif
画面がクリアされず、表示内容が残っていることが確認できます。

ターミナルの(TeratermやGUIからターミナルを立ち上げたときの)動作(同上)

terminal.gif

Terminalからアクセスした場合は、終了時に画面クリアされていることがわかります。

調べて分かったこと

  • lessのソースを見てみたところ、「is_tty」がTrueの時は画面クリアするようになっています。この変数は「isatty(1)」が設定され、ドキュメントを見るとターミナルから接続したときは"1"になるようです。
  • lessのソース該当箇所:https://github.com/gwsw/less/blob/e27853c89be227ad7a1a81aefd2942c03bd32dad/main.c#L387
  • isattyのマニュアル("1"は標準出力のことを示すようだ):https://linuxjm.osdn.jp/html/LDP_man-pages/man3/isatty.3.html

    (2020/04/06:いただいたコメントをもとに確認したところ、確かにisatty(1)はどちらの場合も"1"を返していたため削除。@angel_p_57 さんありがとうございます!)
  • 環境変数$TERMがログインの仕方によって値が変わることを確認しました。
    • Hyper-Vで接続した場合:linux
    • GUIからターミナルを起動したり、外部から(teratermで)ログインした場合:xterm
  • 上記環境変数TERMを変えてみると、ターミナルでもLinuxっぽい動作になったり、Linux上でもターミナルっぽい動作になったので、isattyと関連していると思われます。 $TERMと連動しているようです。
  • $TERMによって切り替える際、「端末情報(infocmp)」に「smcup」「rmcup」があるかどうかで動作が変わるとのことです。
    (2020/04/06いただいたコメントをもとに修正。@angel_p_57 さんありがとうございます!)

私的結論

上記教科書はターミナルでの実行を想定しているため、原則としてLinuxに直接アクセスするのではなく、ターミナルで動かしてみるのがよいと思われます。

0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?