第1章 初めてLinux/UNIX系OSにふれる
エンジニアのための最初の一歩(6)

シェルとコマンド(4)

 

1.2シェルとコマンド(その4)

cshから受け継がれている機能(その2)

ヒストリ置換

 今までに入力したコマンドをもう一度使いたいということはよくあります.この機能を提供してくれるのがヒストリ置換です.たとえば,少し前にgccを使ってプログラムのコンパイルをしたとします.再度同じことをするには,

  $ !gcc

とします.!に続けて文字列を入力すると,この文字列で始まるもっとも最近のコマンドを実行できるわけです.これはコマンド行全体を使う場合(イベント指示記号,表2)ですが,コマンドの一部を再利用することもできます.たとえば,

  $ ls /usr/local/bin

を実行したあとに,

  $ ls -l !$

を実行すると !$は直前のコマンドの最後の単語に置き換えられます.!に続く文字列は,シェルによってヒストリ置換されます.この$以外にも,ヒストリ置換に使われる特別な意味をもつ文字(ワード指示記号,表3)があります.

 

(表2)

イベント指示記

(約10Kバイト)

 

 

 

(表3)

ワード指示記号

(約9Kバイト)

 

 

チルダ置換

 チルダ(~)はシェルによってユーザーのホームディレクトリに置換されます.~に続けてユーザー名を書くと,そのユーザーのホームディレクトリに置換されます.

{}置換

 {}はファイル名の展開と似ていますが,展開されるファイル名が実際に存在していなくても使うことができます.たとえば,/usr/local/srcに複数のディレクトリを作成する場合には,

  $ mkdir /usr/local/src/{bsh,bash,csh,ksh}

として使うことができます.

エイリアス

 よく使う長いコマンドに,短い別の名前をつけてタイプする文字数を減らすことができます.たとえば,lsコマンドには-Fというオプションがあります.-Fをつけるとディレクトリには/を,実行可能ファイルには*をつけて表示します.この機能を頻繁に使うような場合には,

  $ alias ls='ls -F'

として,lsコマンドを置き換えることができます.

 ただし,bashのエイリアス機能はcshほど強力ではありません.bashでは複雑なエイリアスは使わず,より自由度の高い関数の機能を使って実現するよう勧めています.

bash固有の機能(その1)

コマンドライン編集

 bashのコマンドライン編集機能は,テキスト入力が必要なアプリケーションに編集機能を提供するためのreadlineライブラリを使って実装されています.readlineライブラリは,LinuxではポピュラーなRDBであるPostgreSQLでも使われています.

 bashのコマンドライン編集機能はたいへん強力で,入力中のコマンド行だけでなく,ヒストリファイルの中の行も編集して実行することができます(図12)

 

(図12)

コマンドライン編集とヒストリ

(約6Kバイト)

 

 

 そして,編集モードにはemacsモードとviモードがあり,エディタとしてemacsまたはviを常用しているユーザーにとっては,同じ編集コマンドがシェルにも使えるようになるので便利です.

 bashを起動したときのデフォルトはemacsモードですが,これをviモードに変更するためにはsetコマンドを使い,次のように行います.

  $ set -o vi

 readlineの初期化ファイル ~/.inputrcを使って設定すればデフォルトのモードを切り替えることができます.

 emacsモードでは,^Pを押してヒストリファイルを遡って編集したい行を表示させ,^B,^Fでカーソルを左右に移動して必要な編集を行います.このとき,上下左右の矢印キーでカーソルの移動を行うこともできます.

 emacsのサブセットではありますが,emacsと同じ編集コマンドが使えます.ヒストリファイル中を検索するには,^Rを入力して検索文字列を入力すれば,emacsと同様にインクリメンタルサーチができます.表4におもな移動コマンドを示します.

 

(表4)

emacsモードでのおもな移動コマンド

(約9Kバイト)

 

 

 コマンドライン編集でもっとも有用な機能は補完機能です.コマンドやファイル名の途中までを入力してTabを入力すると,入力された文字列で始まるコマンドやファイル名が一つしか存在しない場合にはシェルが足りない部分を入力します.もし,二つ以上候補が存在する場合には,シェルは共通する部分までを入力し,ユーザーの入力を待ちます.ここで,再度Tabを入力すると候補となるコマンドやファイル名を表示します.

 viモードの場合,最初は入力モードになっているので,ヒストリファイルを遡るためには,まずEscを入力してコマンドモードへ移行します.ここでh,j,k,lのカーソル移動コマンドや/による検索が可能です./が後方への検索に割り当てられています.viモードにおいても,Escを入力することでコマンドやファイル名の補完を行うことができます.


Copyright 2000 
日樫 英孝/増田 佳泰/山岡 賢一/船木 陸議/ 羅 正華/森 友一朗/祐安 重夫/岩田 孝清/海老原 祐太郎/g新部 裕/ 齊藤 正伸

新刊のご案内


Copyright 1997-2001 CQ Publishing Co.,Ltd.