next up previous contents
: 環境変数とシェル変数 : シェルの基本操作 : オンラインマニュアルとページャの操作法   目次


コマンドヒストリとコマンドやファイル名の補完

シェルの CUI では、キーボードでコマンドを入力します。 キーボードでキーをタイプするのにはそれなりの力が必要で、長時間タイプし 続けると、指が疲れてきます。間違って、タイプミス(typo51)してしまうことも あるでしょう。コマンド名やファイル名がうろ覚えで、思い出せないことも多い はずです。この節では、シェルでキータイプの数をできるだけ減らして同じことをさせる 方法や、typo をできるだけしないコマンドやファイル入力の方法を説明 します。これらを知っているかどうかで、シェルの作業効率は大幅に違います。

長いコマンドや多くの引数をもつコマンドを打ち込んだのに、1文字だけ typo したために、エラーになってしまうことは、よくあります。そんな時、また、そ のコマンドを最初からタイプしないといけないとしたら、その精神的打撃は計り しれません(大袈裟か:)。コマンドヒストリとは、以前にコマンドラインに入力 したコマンドを再利用する方法です。シェルは、以前に入力されたコマンドを覚 えています。それを呼び出すには、上カーソルキー($ \uparrow$)または Ctrl + p を使います。呼び出されたコマンドは、カーソルキーなどを使って、再編集 できます(コマンドライン編集)。コマンドライン編集時の主なキーバインドを 示します。これらは、ほとんど §3.1節で説明する emacs のキーバ インドと共通です。

$ \uparrow$ または Ctrl + p 前の行へ
$ \downarrow$ または Ctrl + n 次の行へ
$ \leftarrow$ または Ctrl + b カーソルを左に
$ \rightarrow$ または Ctrl + f カーソルを右に
Ctrl + a カーソルを行頭へ
Ctrl + e カーソルを行末へ
Ctrl + k カーソル以降をカット
Ctrl + y カットしたものをペースト
BS または Delete カーソルの前の1文字を削除
return コマンドの実行(カーソルはどこにあっても構わない)

数回前に使ったコマンドなら、$ \uparrow$ キーで捜した方が簡単ですが、 数10回前に使ったコマンドまで $ \uparrow$ キーでたどり着くのは大変です。 そんな時は、history コマンドが使えます。

 % history
   321  8:01    jman man
   ........ (中略)
   352  15:30   history | wc -l
   353  15:30   jman history
   354  15:31   man tcsh
   355  15:34   history
 %
history の引数で番号を与えると、その行数だけの過去のコマンドを表示します 52。 過去に使ったコマンドは、「!番号」 または 「!文字列」で実行できます。後者の場合、 一番最近使ったその文字列から始まるコマンドを実行します。上の例だと、!m とコマンドラインに入力すると、man tcsh が実行されます。

コマンド名やファイル名がうろ覚えの時は、シェルの補完機能を使う と便利です。例えば、firefox を起動させる場合を例に説明します。

  % fireTAB  (fireとキー入力した後に、TABキーを押す)
  % firefox  (自動的に firefox と補完される)
  % fiTAB    (fiのあとで TAB を押しても、ビープ音が鳴り何も起こらない)
             (ここで、Ctrl + d を押す)
  fiascotopnm     files           findtr          fixmacps        fixwfwps
  fig2dev         filetest        finger          fixmount        fixwpps
  ... (途中省略)
  file2c          findaffix       fixfmps         fixtpps
  % firTAB   (r を追加してからTABで、firefoxまで補完される)
  % firefox  (ここで、更に Ctrl + d を押すと、ふたつの候補が表示される)  
  firefox         firefox-config
  % firefox
  % set autolist  (オートリストをセット)
  % fiTAB       (TABを押しただけで、候補が自動的に表示される)
  fiascotopnm     files           findtr          fixmacps        fixwfwps
  fig2dev         filetest        finger          fixmount        fixwpps
  ... (以下省略)
コマンドの入力の途中で TABキーを押すと、シェルはそれまで入力されたコマン ドの補完を試みます。すでに入力されている文字列の次の候補の文字がひとつし かなければ補完し、複数の候補がある場合にはそこまで到達してから補完をあ きらめます。そこで、Ctrl + d を押すと、候補の一覧を表示します53。set autolist と設定すると、TABを押しただ けで(候補が複数ある場合には)一覧を表示するようになります54

コマンドの補完は、コマンドラインの最初の文字列についてのみ行われます。ス ペースが1つ以上はさんだ次の文字列については、シェルは、コマンドではなくファ イルまたはディレクトリであると仮定して、補完を試みます。

 % ls TAB  (ls のあとにスペースを1個入れてから、TABを押してみる)
           (set autolist されていない場合は、Ctrl + d を押す)
あとは、コマンドの補完と同じです。



練習 1

シェル変数 autolist を set と unset して、コマンドやファイル名の補完の 動作が変わることを確かめましょう。シェル変数や set と unset については、 §2.3.4 も参照して下さい。