ユーザはシェルを利用してコンピュータに命令を与えます.シェルはユーザの入力 した文字列を解釈し,コマンドを実行します.また,コマンドの簡単な実行や同 じ作業の繰り返し,複数のプログラムの管理など,さまざまな機能を提供します.
シェルはユーザがコマンドを効率的に入力するためにユーザとコンピュー タを仲介する役割を果たしています.表14.1にシェルの機能を示します.
シェルには,コマンドやファイル名が長いときに,最後まで入力しなくても残 りの部分を補完する機能があります.これを``補完機能''といいます.コマンドやファイル 名を途中まで入力して,<TAB>を押すと次のような補完機能を利用できます.
% ls <ENTER> report.tex report-all % rm re <TAB> % rm report _ % rm report- <TAB> % rm report-all _
ファイル名やコマンドを途中まで入力したところで,C-dを押すと,そ こまで入力した内容に該当するコマンドやファイルが表示されます.
% ls <ENTER> report.tex report-all % rm rereport.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_
同じコマンドを何度も実行する際に,そのコマンドに簡単な別名(エイリアス)を 登録することによって作業の効率化をはかれます. 次にエイリアスの登録,確認,削除について説明します.
エイリアスを登録するには,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コマンドを書いておくと,その後に起動されるシェルすべてにそのエ イリアスを適用できます.
現在登録されているエイリアスの一覧を見るには,aliasコマンドを引 数なしで実行します.すると,左側に登録されている別名,右側に実際に実行 されるコマンドラインを並べたリストが表示されます.このときaliasコ マンドの引数として,登録した別名だけを指定するとその別名の実際のコマン ドラインが表示されます.
% alias <ENTER> dir ls -F rm rm -i % alias dir <ENTER> ls -F % _
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 % _
シェルは過去に実行したコマンドを記憶しています.これ をシェルの``ヒストリ機能''といいます.ヒストリ機能を利用して過去に入力したコマ ンドを簡単に再実行できます.
ユーザが入力したコマンドは,入力の順番と共に記憶されています.これ を``ヒストリリスト''といいます.ヒストリリストを確認するには,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種類があります.
書式 | 意味 |
!! | 直前のコマンドの再実行 |
!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 % _
ヒストリ機能を利用してコマンドを実行する前に,あらかじめコマンドの内 容を確認できます. ヒストリ指定の直後でスペースを空けずに `: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 % _
コマンドは,入力してから<ENTER>を押すまでであれば内容を変更 できます.一度入力したコマンドを編集するには,表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つ後のコマンドを呼び出す |
基本的にシェルは1つのコマンドが実行されると,そのコマンドの終了を待ち 続けます.その間,プロンプトは表示されないので次のコマンドの入力はできま せん.同じシェルで複数のコマンドを並行して処理するためには,あらかじめ 実行するコマンドに`&'をつけて実行する必要があります. `&'をつけて実行されたコマンドは``バックグラウンドジョブ''といい,コマンドの終了を待たずにプロンプトが表示されます.
コマンド名を入力して<ENTER>を押すと,シェルはコマンドの処理が終わるまで次のコマンドを実行できません. この状態で実行されている処理を``フォアグラウンドジョブ''といいます. 次の例では,テキストエディタ であるEmacs ()を起動するコマンドを実行していますが,このEmacsはフォアグラウンドジョブで行っているため,Emacsを終了するまでプ ロンプトが表示されず,他のコマンドを実行できません.
% emacs <ENTER> _
これに対して,コマンドの処理が終るまで待たずにプロンプトを表示するよ うな実行の仕方を,``バックグラウンドジョブ''といいます.コマンドをバックグ ラウンドジョブとして起動するには,コマンドの後に`&'をつけて 実行します.
次の例では,バックグラウンドジョブでEmacsを起動しているため,Emacsを使い ながら他のコマンドを実行できます.フォアグラウンドジョブとして実行できる ジョブは1つだけですが,バックグラウンドジョブとして実行することで,複数のジョ ブを同時に実行できます.
% emacs & <ENTER> [1] 15895 % _
フォアグラウンドジョブとバックグラウンドジョブには,いくつかの違いがあり ます.フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は,どちらも表示されます.しかし,シェルから情報を入力できるのは,フォアグラ ウンドジョブのみです. 引数として数値やファイル名などの情報を入力することが必要なコマンドを,バックグラウンドジョブとして実行すると,処理が中断されています. その時には,フォアグラウンドジョブにして必要な引数などを 入力する必要があります.
シェルが現在実行しているジョブの情報を知るには,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に示 します.
表示 | 意味 |
左端の[ ]内の数字 | ジョブ番号 |
Running | バックグラウンドジョブで実行中のJob |
Suspended | 一時停止中のジョブ |
+ | ``currentジョブ'' (フォアグラウンドで最後に実行されたジョブ) |
- | ``previousジョブ'' (currentジョブの前に実行されたジョブ) |
ジョブの操作には,表14.5のようなコマンドを用います. いずれも引数としてジョブ番号を指定します. ジョブ番号が省略された場合,killコマンド以外はcurrentジョブが対 象となります.
実行中のフォアグラウンドジョブを強制終了するには,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 % _
CNS のUNIX では,オンラインマニュアルやエラーメッセージなどは 基本的に日本語で表示されます. 日本語で表示されない場合は,次のようにロケール値を設定する必要が あります.
表14.6にホストごとのロケール値の設定を示します.
次に実行例を示します.
% setenv LANG ja <ENTER> % _
ユーザは,``環境変数''を利用することで,シェルやコマンドの動作を操作できます. 現在設定されている環境変数の一覧を表示するには,printenvコマンド を実行します. 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> % _