2003 CNS GUIDE
copyright
 

14.2 シェルの応用

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

14.2.1 シェルの機能

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

表 14.1 シェルの機能
機能 説明 ページ
補完機能 コマンドやファイル名を補完する [*]
置換機能 ファイル名を効率的に入力できるようにする [*]
エイリアス機能 コマンドに対して別の名前を割り当てる [*]
リダイレクション,パイプ 複数のコマンドを結合して実行する [*]
ヒストリ機能 すでに使ったコマンドを何度も利用できるようにする [*]
コマンドの編集機能 Enterを押すまで内容変更ができる [*]
ジョブ管理 コマンド実行中は次のコマンド入力をできなくする [*]

14.2.2 補完機能

14.2.2.1 <TAB>を使った補完

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

% ls <ENTER>
report.tex      report-all
% rm re <TAB>
% rm report _
% rm report- <TAB>
% rm report-all _

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

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

% ls <ENTER>
report.tex      report-all 
% rm re 
report.tex      report-all
% rm re_
% rm report- <TAB>
% rm report-all _
% dv 
dvi2fax   dvicopy   dvilj     dvilj4    dvilj6   dvips    dviselect   dvitype
dvi2ps    dvihp     dvilj2p   dvilj4l   dvipdf   dvired   dvitomp
% dv_

14.2.3 エイリアス

同じコマンドを何度も実行する際に,そのコマンドに簡単な別名(エイリアス)を 登録することによって作業の効率化をはかれます. 次にエイリアスの登録,確認,削除について説明します.

14.2.3.1 エイリアスの登録

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

alias [別名] [エイリアスをつけたいコマンド]

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

% ls -F <ENTER>
dir1/           file1           linkfile@
% dir <ENTER>
dir: Command not found.
% alias dir ls -F <ENTER>
% dir <ENTER>
dir1/           file1           linkfile@
% _

aliasコマンドを利用する前に,登録する文字列がコ マンドとして存在しないことを確認しておく必要があります.

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

14.2.3.2 エイリアスの確認

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

% alias <ENTER>
dir     ls -F
rm      rm -i
% alias dir <ENTER>
ls -F
% _

14.2.3.3 エイリアスの解除

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

% which dir <ENTER>
dir:    aliased to ls -F
% dir <ENTER>
file1           other@          report/
% unalias dir <ENTER>
% dir <ENTER>
dir: Command not found.
% _

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

% cat file.tex <ENTER>
Alias loop.
% alias <ENTER>
cat     more
more    cat
% unalias cat <ENTER>
% alias <ENTER>
more    cat
% cat file.tex <ENTER>
I can feel
    Something in the fall
       Nothing but blue sky
% _

14.2.4 ヒストリ機能

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

14.2.4.1 ヒストリリスト

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

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

14.2.4.2 コマンドの再実行

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

表 14.2 コマンドの再実行法
書式 意味
!! 直前のコマンドの再実行
!n n番目(ヒストリ番号)に実行したコマンドの再実行
!-n もっとも大きいヒストリ番号からnを引いたヒストリ番号のコマンドの再実行
!str 指定された文字列(str)ではじまる1番最近に実行したコマンドの再実行
% history 4 <ENTER>
    10  15:18   ls
    11  15:29   more history.txt
    12  15:29   a2ps history.txt | lpr -Pnps2
    13  15:32   history	4
% !! <ENTER>
history 4
    11  15:29   more history.txt
    12  15:29   a2ps history.txt | lpr -Pnps2
    13  15:32   history	4
    14  15:33   history 4
% !a2 <ENTER>
a2ps history.txt | lpr -Pnps2
% _

14.2.4.3 実行前のコマンド確認

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

% !9:p <ENTER>
ls -l
% !! <ENTER>
ls -l 
total 2
-rw-r--r--  1 s03000hf      13450 Nov 18 10:40 history.ps
-rw-r--r--  1 s03000hf       3402 Nov 22 09:35 report.tex
% _

14.2.5 コマンドの編集

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

表 14.3 コマンド編集時のキー操作
目的 キー 動作
カーソルの移動 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つ後のコマンドを呼び出す

14.2.6 ジョブ管理

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

14.2.6.1 フォアグラウンドジョブとバックグラウンドジョブ

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

% emacs <ENTER>
_

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

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

% emacs & <ENTER>
[1] 15895
% _

フォアグラウンドジョブとバックグラウンドジョブには,いくつかの違いがあり ます.フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は,どちらも表示されます.しかし,シェルから情報を入力できるのは,フォアグラ ウンドジョブのみです. 引数として数値やファイル名などの情報を入力することが必要なコマンドを,バックグラウンドジョブとして実行すると,処理が中断されています. その時には,フォアグラウンドジョブにして必要な引数などを 入力する必要があります.

14.2.6.2 ジョブの状態を知る

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

% xclock & <ENTER>
% less /home/s03000hf/file3 & <ENTER>

^Z
Suspended
% xv & <ENTER>
% jobs <ENTER>
[1]  - Running                xclock
[2]  + Suspended              less /home/s03000hf/file3
[3]    Running                xv
% _

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

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

14.2.6.3 ジョブの操作

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

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

14.2.6.4 強制終了とサスペンド

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

% emacs & <ENTER>
% mozilla & <ENTER>
% jobs <ENTER>
[1]  + 実行中です                emacs 
[2]  - 実行中です                mozilla
% fg %2 <ENTER>
mozilla

^Z
中断
% jobs <ENTER> 
[1]  - 実行中です                emacs
[2]  + 中断                      mozilla
% bg %2 <ENTER>
[2]    mozilla &
% jobs <ENTER>
[1]  + 実行中です                emacs 
[2]    実行中です                mozilla
% fg %1 <ENTER>
emacs

^C
% jobs <ENTER>
[2]  + 実行中です                mozilla
% _

14.2.7 日本語の利用

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

setenv LANG [ロケール値]

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

表 14.6 日本語LANG環境の設定
ホスト名 ロケール値
zux???,webedit ja_JP.EUC
ccz?? ja

次に実行例を示します.

% setenv LANG ja <ENTER>
% _

14.2.7.1 環境変数

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

printenv [環境変数名] setenv [環境変数名] [値] unsetenv [環境変数名]

以下の実行例では,LANG環境変数を`ja'から`ja.JP_EUC'に変更したのちに,LANG環境変数を解除しています.

% printenv LANG <ENTER>
ja
% setenv LANG ja.JP_EUC <ENTER>
% printenv LANG <ENTER>
ja.JP_EUC
% unsetenv LANG <ENTER>
% printenv LANG <ENTER>
% _