logo
 
cpacer

5.4 シェルの応用

ユーザはシェルを利用してコンピュータに命令を与えます.シェルはユーザの入力 した文字列を解釈し,コマンドを実行します.また,コマンドの簡単な実行や同 じ作業の繰り返し,複数のプログラムの管理など,さまざまな機能を提供します.

5.4.1 シェルの機能

シェルはユーザがコマンドを効率的に入力するためにユーザとコンピュー タを仲介する役割を果たしています.表5.3にシェルの機能を示します.


表 5.3: シェルの機能
機能 ページ
コマンド,ファイル名を補完する(補完機能) [*]
ファイル名を効率的に入力できるようにする(置換機能) [*]
コマンドを登録する(エイリアス機能) [*]
複数のコマンドを結合して実行する(リダイレクション,パイプ) [*]
すでに使ったコマンドを何度も利用できるようにする(ヒストリ機能) [*]
コマンドの編集機能 [*]
ジョブ管理 [*]

5.4.2 補完機能

5.4.2.1 <TAB>を使った補完

シェルには,コマンドやファイル名が長いときに,最後まで入力しなくても残 りの部分を補完する機能があります.これを``補完機能''といいます.コマンドやファイル 名を途中まで入力して,<TAB>を押すと次のような補完機能を利用できます.

5.4.2.2 C-dを使った補完機能

ファイル名やコマンドを途中まで入力したところで,C-dを押すと,そ こまで入力した内容に該当するコマンドやファイルが表示されます.

5.4.3 エイリアス機能

エイリアス機能を使うと,コマンドの別名(エイリアス)を登録できます.ユーザ は頻繁に利用するコマンドを登録することで,効率的な作業 を行えます.次にエイリアスの登録,確認,削除について説明します.

5.4.3.1 エイリアスの登録

エイリアスを登録するには,aliasコマンドを使用します.エイリアスには, コマンドそのものだけでなくコマンドにオプションや引数を指定して登録で きるので,自分がそのコマンドを使う際に必ず指定するオプションなどが決まっ ている場合には,それらもまとめて登録できます.

次の実行例では,`ls -F'というコマンドを`dir'というエイリ アス(別名)で登録しています.

エイリアス機能を使って,すでにあるコマンドをエイリア スに指定すると,そのコマンドは利用できません. そこで,aliasコマンドを利用する前に,登録する文字列がコ マンドとして存在しないことを確認しておく必要があります.

エイリアスは,基本的にaliasコマンドを実行したシェルでのみ 有効です.そのため,exitやlogoutなどのコマンド で1度そのシェルを閉じてしまうと,登録したエイリアスは失われてしまいます. そこで,毎回同じエイリアスを利用する場合には,ホームディレクトリにある `.cshrc'という設定ファイルに aliasコマンドを書き込みます.`.cshrc'ファイルに aliasコマンドを書き込むと,起動されるシェルすべてにそのエ イリアスを適用できます.

5.4.3.2 エイリアスの確認

現在登録されているエイリアスの一覧を見るには,aliasコマンドを引 数なしで実行します.すると,左側に登録されている別名,右側に実際に実行 されるコマンドラインを並べたリストが表示されます.このときaliasコ マンドの引数として,登録した別名だけを指定するとその別名の実際のコマン ドラインが表示されます.

5.4.3.3 エイリアスの解除

1度登録したエイリアスを解除するには,unaliasコマンドを利用し ます.


エイリアスをいくつも指定していると,エイリアスで設定した内容を再びエイ リアスに指定してしまうことがあります.このときには,`Alias loop.' と表示され,そのコマンドを実行できなくなります.また,すでに存在するコマン ドと同じ名前をエイリアスに設定すると,そのコマンドが実行できなくなります. このようなときには,aliasコマンドで重複しているエイリアスを確認し, unaliasコマンドで解除します.



5.4.4 ヒストリ機能

シェルは過去に実行したコマンドを記憶しています.これ をシェルの``ヒストリ機能''といいます.ヒストリ機能を利用して過去に入力したコマ ンドを簡単に再実行できます.

5.4.4.1 ヒストリリスト

ユーザが入力したコマンドは,入力の順番と共に記憶されています.これ を``ヒストリリスト''といいます.ヒストリリストを確認するには,historyコ マンドを用います.ヒストリコマンドに引数として数字を指定すると,最後に実行されたコマンドから数字分だけヒストリを表示します.引数を省略した場合に は,記憶しているすべてのヒストリを表示します.

% history [数字] <RET>
% ls <RET>
% cd <RET>
% pwd <RET>
% history <RET>
    1  15:34   ls
    2  15:34   cd
    3  15:35   pwd
    4  15:35   history
% history 3 <RET>
    1  15:35   pwd
    2  15:35   history
    3  15:36   history 3
% _


5.4.4.2 コマンドの再実行

ヒストリ機能を用いて,ユーザはコマンドを再実行できます.再実行の方 法には表5.4に示す4種類があります.


表 5.4: コマンドの再実行法
書式 意味
!! 直前のコマンドの再実行
!n n番目(ヒストリ番号)に実行したコマンドの再実行
!-n もっとも大きいヒストリ番号からnを引いたヒストリ番号のコマンドの再実行
!str 指定された文字列(str)ではじまる1番最近に実行したコマンドの再実行

5.4.4.3 実行前のコマンド確認

ヒストリ機能を利用してコマンドを実行する前に,あらかじめコマンドの内 容を確認できます. ヒストリ指定の直後でスペースを空けずに `:p'を入力すると,ヒ ストリリストから指定されたコマンドを表示します.そのままコマンドを 実行する場合には,続けて`!!'を入力します.次にヒストリ番号9の コマンドの内容を確認し,それを再実行する例を示します.

5.4.5 コマンドの編集

コマンドは,入力してから<RET>を押すまでであれば内容を変更 できます.一度打ち込んだコマンドを編集するには,表5.5のキー操作を 利用します.


表 5.5: コマンド編集時のキー操作
目的 キー 動作
カーソルの移動 C-b カーソルを左に1つ動かす
  C-f カーソルを右に1つ動かす
  C-a コマンドの行頭に移動
  C-e コマンドの行末に移動
文字の削除 C-d カーソル上の1文字を削除
  C-h カーソルの左の1文字を削除
  C-k カーソルからコマンドの行末までを削除
  C-u コマンド全体を削除
ヒストリの呼び出し C-p 表示されているコマンドの
1つ前のコマンドを呼び出す
  C-n 表示されているコマンドの
1つ後のコマンドを呼び出す

5.4.6 ジョブ管理

基本的にシェルは1つのコマンドが実行されると,そのコマンドの終了を待ち 続けます.その間,プロンプトは表示されないので次のコマンドの入力はできま せん.同じシェルで複数のコマンドを並行して処理するためには,あらかじめ 実行するコマンドに`&'をつけて実行する必要があります. `&'をつけて実行されたコマンドは``バックグラウンドジョブ''といい, コマンドの終了を待たずにプロンプトが表示されます.

5.4.6.1 フォアグラウンドとバックグラウンド

コマンド名を入力して<RET>を押すと,プロンプトはコマンドの処理が終 わるまで表示されません.このようにシェルと対話式に処理していくジョ ブを,``フォアグラウンドジョブ''といいます.次の例では,テキストエディタ であるEmacs([*])を起動するコマンドを実行していますが, このEmacsはフォアグラウンドジョブで行っているため,Emacsを終了するまでプ ロンプトが表示されず,他のコマンドを実行できません.

これに対して,コマンドの処理が終るまで待たずにプロンプトを表示するよ うな実行の仕方を,``バックグラウンドジョブ''といいます.コマンドをバックグ ラウンドジョブとして起動するには,コマンドの後に`&'をつけて 実行します.

次の例では,バックグラウンドジョブでEmacsを起動しているため,Emacsを使い ながら他のコマンドを実行できます.フォアグラウンドジョブとして実行できる ジョブは1つだけですが,バックグラウンドジョブとして実行することで,複数のジョ ブを同時に実行できます.

フォアグラウンドジョブとバックグラウンドジョブには,いくつかの違いがあり ます.フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は, どちらも表示されます.しかし,シェルから情報を入力できるのは,フォアグラ ウンドジョブのみです.数値やファイル名などの情報を 起動後に入力しなければならないアプリケーションがバックグラウンドジョブと して実行されていた場合,そのジョブがフォアグラウンドになるまで処理が中断 されてしまいます.

5.4.6.2 ジョブの状態を知る

シェルが現在実行しているジョブの情報を知るには,jobsコマンド を利用します.

左端の`[ ]'の中の数字は``ジョブ番号''といい,シェルがジョブを処理す る際にジョブにつける番号です.ジョブを操作するコマンドは,すべてこの ジョブ番号を指定して行います.その他の表示の意味を表5.6に示 します.

表 5.6: jobsコマンドの出力
表示 意味
左端の[ ]内の数字 ジョブ番号
Running バックグラウンドジョブ
Suspended 一時停止中のジョブ
+ ``currentジョブ'' (フォアグラウンドで最後に実行されたジョブ)
- ``previousジョブ'' (currentジョブの前に実行されたジョブ)

5.4.6.3 ジョブの操作

ジョブの操作には,表5.7のようなコマンドを用います. いずれも引数としてジョブ番号を指定します. ジョブ番号が省略された場合,killコマンド以外はcurrentジョブが対 象となります.

ジョブ操作
コマンド 意味
fg バックグラウンドからフォアグラウンドへの切り替え
bg サスペンドしていたジョブをバックグラウンドで実行する
kill ジョブを終了する

5.4.6.4 強制終了とサスペンド

実行中のフォアグラウンドジョブを強制終了するには,C-cを押します.ま た,C-zを押すと,フォアグラウンドで実行されているジョブをサスペ ンド(一時中断)できます.さらに,サスペンドしたジョブはfgやbg などのコマンドで復帰します.例えばバックグラウンドで起動するジョブを間違 えてフォアグラウンドで起動してしまったときに,一度サスペンドをして bgコマンドを実行することで,バックグラウンドジョブに切り替えられます. 次にその実行例を示します.

5.4.7 日本語の利用

CNS のUNIX環境では,オンラインマニュアルやエラーメッセージなどは 基本的に日本語で表示されます. 日本語で表示されない場合は,次のようにロケール値を設定する必要が あります.

5.8にホストごとのロケール値の設定を示します.


表 5.8: 日本語LANG環境の設定
ホスト名 ロケール値
z???,ccz?? ja
otwo?? ja_JP

次に実行例を示します.

5.4.7.1 環境変数

ユーザは,``環境変数''という変数を利用することで, シェルやコマンドの動作を操作できます. 現在設定されている環境変数の一覧を表示するには,printenvコマンド を実行します. printenvコマンドの後に引数として環境変数名を指定すると, その変数だけが表示されます. 環境変数を設定するには,setenvコマンドを用います. 環境変数はコマンドの実行環境を規定し,起動したコマンドにも引き継がれます.

アプリケーションの中には環境変数に指定された値によって動作を変えるもの があります.次に例を示します.

5.4.7.2 X Window Systemのディスプレイ指定

X Window Systemを使ってウィンドウを表示するアプリケーションを起動する 場合,環境変数DISPLAYにディスプレイ名を設定することで,その出力 先のディスプレイ名を指定できます([*]).

なお,ディスプレイ名は通常,利用中のホストにシールで貼ってある名前に `:0.0'を加えたものです.次の例ではディスプレイを`host00:0.0' に指定しています.