試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

端末シェル操作の基本的な流れについて(後半)

端末シェル操作の基本的な流れについて(前半)」の続き。

  1. シェルから抜ける
    1. ログアウト時におけるサスペンド/バックグラウンド状態のジョブの挙動について
  2. 履歴について

シェルから抜ける

シェルから抜けるには、プロンプトが出ていてかつ入力文字列のないときにCtrl+Dを押すかexitコマンド*1を実行する。

$ (Ctrl+D)
(もしくは)
$ exit

ログアウト時におけるサスペンド/バックグラウンド状態のジョブの挙動について
シェル上のプロセスの動作状態(フォアグラウンド/バックグラウンド/サスペンド)とその制御について(前半)」「シェル上のプロセスの動作状態(フォアグラウンド/バックグラウンド/サスペンド)とその制御について(後半)」で扱っているサスペンド状態のプロセス(ジョブ)がある場合は

(bashの場合)
There are stopped jobs.
(zshの場合)
zsh: you have suspended jobs.
(tcshの場合)
There are suspended jobs.

のようなメッセージが表示され、再びログアウトを試みるとこれらのプロセスはSIGHUPというシグナル(関連記事)により終了する。
バックグラウンド状態のものについてもbashzshでは同様にシェルから抜けたときに終了される

bash_or_zsh$ nohup [コマンド...] &

のようにしてnohupコマンドを用いつつバックグラウンドで起動したプロセスはログアウト時に終了されず、zshでは以下の設定によりバックグラウンド動作しているプロセスを終了しないようにできる。
ファイル名: ${ZDOTDIR}/.zshrc

setopt no_HUP

tcshの場合はバックグラウンドジョブがあるときのログアウト時に既定ではSIGHUPシグナルは送られずに、組み込みコマンドhupを用いて

tcsh$ hup [コマンド...] &

として起動したときにのみログアウト時にシグナルが送られる。

履歴について

コマンド行の入力時に上矢印キーまたはCtrl+P*2により、前回入力したコマンド行を表示してこれを編集して実行することができる。次(後)の順番に進めるには下矢印キーかCtrl+Nとなる。*3
Ctrl+Rキー*4を押すと履歴の検索モードに入り、ここで入力した文字列を(1文字入力する度に)以前入力したコマンド行の記録から検索して一致するものを表示する。Ctrl+Rを繰り返し押すと同じ文字列をより過去に遡って再検索する。見つからない場合は表示が更新されず、ビープ音も出る。
履歴の件数はシェルの初期化ファイルにて設定できるが、シェルごとに設定項目は異なる。
シェルごとの履歴数を変更する変数
シェル内部保持数ファイルへの記録数
bashHISTSIZEHISTFILESIZE
zshHISTSIZESAVEHIST
tcshhistorysavehist*5
値については

[内部保持数] >= [ファイルへの記録数]

となるようにする。

*1:素の端末ではlogoutでも可

*2:GNU EmacsGNU nanoなどの上移動と同様

*3:GNU EmacsGNU nanoなどの下移動と同様

*4:tcshの場合は初期化ファイル${HOME}/.tcshrcに「bindkey ^R i-search-back」(別のキーに割り当てることもできる)のように機能割り当ての設定が必要

*5:数値の後ろに「merge」指定で追記になる