Unixシェルのユーザサポート機能

人間は怠惰なもので、なるべく楽したいといつも思っている(たぶん)。シェルはコンピュータがわかる範囲でユーザのコマンド入力を助ける機能をいくつか持っている。そのうち代表的なものをとりあげる。

シェルには過去に実行したコマンドを表示したり、再実行したり、一部を編集して実行したりする機能もある。

過去に実行したコマンドの一覧を得るにはhistoryコマンドを使う。

historyコマンドで表示されたコマンド名の前に番号がついているが、これを参照して
!番号[改行] で再実行
!番号:s/文字列1/文字列2/ で番号のコマンドの文字列1を文字列2に置換してから再実行
!文字列[改行]で文字列を含む最も新しいコマンド行が再実行
!![改行] で直前に実行したコマンド行の再実行
といったことができる。

(実習)historyコマンドを実行し、上記の再実行コマンドを試せ。

またこのような間接的な(?)方法だけではなく、エディタで編集してから再実行するような方法もある。
^P(コントロールp)で履歴を1コマンドずつさかのぼる
^Nで戻る
^Rで探索モードに入り、求めるコマンドの一部を入力する。
いずれの方法でも、求めるコマンド行が見つかったら行内編集が可能
^A: カーソルを行頭へ
^E: カーソルを行末へ
^F: カーソルを一文字右へ
^B: カーソルを一文字左へ
^D: カーソルのところにある文字を消去
[DEL]: カーソルの直前にある文字を消去
c: 文字cをそのままカーソルの前に挿入
修正が終わったら改行キーで実行させる。

(実習)historyに対し、上記の履歴編集コマンドをいくつか発行して試せ。

bashを含む現代的なシェルにはさらに強力なコンプリーション(補完)機能がある。コマンド名やファイル名を入力している途中で
  • [TAB]キーを入力すると、候補が一つしかないときは展開される(そうでないときは何もおこらない)
  • もう一回打つと候補が表示される
  • [ESC]?を入力すると、候補が表示される

(実習)次のコマンドを実行し、結果を解釈せよ。
$ ls /usr/b[TAB]
$ ls /usr/bin/z[TAB]
ls /usr/bin/z[TAB][TAB]    # tab 2回
このような、シェルのユーザ支援機能の登場によって、コマンドラインの使い勝手はずいぶんよくなった。Bashには他にもいろいろなユーザ支援機能があるので、調べてみるとよい。

(参考文献)このページの記述は

久野靖『UNIXによる計算機科学入門』

を参考にしています。

Comments