UNIXの操作/UNIXの応用/シェルの応用
ユーザはシェルを使ってコンピュータに命令を与えます.シェルはユーザの入力した文字列を解釈し,コマンドを実行します.また,コマンドの簡単な実行,同じ作業の繰り返し,複数のプログラムの管理など,さまざまな機能を提供します. 4.4.1 シェルの機能シェルはユーザがコマンドラインを効率的に入力するためのユーザインタフェースの役割を果たしています.シェルのユーザインタフェース機能を表4.3に示します.
4.4.2 補完機能<TAB>を使った補完シェルには,コマンドやファイル名が長いときに,最後まで入力しなくても残りの部分を補完する機能があります.これを``補完機能''といいます.コマンドやファイル名を途中まで入力して,<TAB> を押すと次のような補完機能を利用できます.
%ls <RET> report.tex report-all %rm re<TAB> % rm report_ %rm report-<TAB> % rm report-all _ C-dを使った補完機能ファイル名やコマンドを途中まで入力したところで,C-dを押すと,そこまで入力した内容に該当するコマンドやファイルが表示されます.
%ls <RET> report.tex report-all %rm re<C-d> report.tex report-all % rm re_ %rm report-<TAB> % rm report-all _ %dv<C-d> dvi2ps dviselect % dv_ 4.4.3 メタキャラクタ文字候補を指定するメタキャラクタ [ ]
` 文字列候補を指定するメタキャラクタ { }
`
ホームディレクトリを表すメタキャラクタ
|
|
%history 4 <RET> 10 15:18 ls 11 15:29 more history.txt 12 15:29 a2ps history.txt | lpr -Pnps2 13 15:32 history %!more <RET> more history.txt % _
実行する前にコマンドラインを確認する
ヒストリ機能を利用してコマンドを実行する前に,あらかじめコマンドラインの内容を確認できます.ヒストリ指定の直後でスペースを空けずに `:p
'を入力すると,ヒストリリストから指定されたコマンドラインを表示します.そのままコマンドを実行する場合には,続けて`!!
'を入力します.次にヒストリ番号9のコマンドの内容を確認し,それを再実行する例を示します.
%!9:p <RET> ls -l %!! <RET> ls -l total 2 -rw-r--r-- 1 s01000hf13450 Nov 18 10:40 history.ps -rw-r--r-- 1 s01000hf3402 Nov 22 09:35 report.tex % _
4.4.6 コマンドラインの編集
コマンドラインは,入力してから<RET> を押すまでであれば内容を変更できます.コマンドラインを編集するには,表4.5のキー操作を利用します.
4.4.7 ジョブ管理
基本的にシェルは1つのコマンドが実行されると,そのコマンドの終了を待ち続けます.その間,プロンプトは表示されないので次のコマンドの入力はできません.同じシェルで複数のコマンドを並行して処理するためには,あらかじめ実行するコマンドに`&
'をつけて実行する必要があります.`&
'をつけて実行されたコマンドは``バックグラウンドジョブ''と呼ばれ,コマンドの終了を待たずにプロンプトが表示されます.
フォアグラウンドとバックグラウンド
コマンド名を入力して<RET> を押すと,プロンプトはコマンドの処理が終わるまで表示されません.このようにシェルと対話式に処理していくジョブを,``フォアグラウンドジョブ''といいます.次の例では,テキストエディタであるEmacsを起動するコマンドを実行していますが,このEmacsはフォアグラウンドジョブで行っているため,Emacsを終了するまでプロンプトが表示されず,他のコマンドを実行できません.
%emacs <RET>
_
これに対して,コマンドの処理が終わるまで待たずにプロンプトを表示するような実行の仕方を,``バックグラウンドジョブ''といいます.コマンドをバックグラウンドジョブとして起動するには,コマンドの後に`&
'をつけて実行します.
次の例では,バックグラウンドジョブでEmacsを起動しているため,Emacsを使いながら他のコマンドを実行できます.フォアグラウンドジョブとして実行できるジョブは1つだけですが,バックグラウンドジョブとして実行することで,複数のジョブを同時に実行できます.
%emacs &<RET>
[1] 15895
% _
フォアグラウンドジョブとバックグラウンドジョブには,いくつかの違いがあります.フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は,どちらも表示されます.しかし,シェルから情報を入力できるのは,フォアグラウンドジョブのみです.数値やファイル名などの情報を起動後に入力しなければならないアプリケーションがバックグラウンドジョブとして実行されていた場合,そのジョブがフォアグラウンドになるまで処理が中断されてしまいます.
ジョブの状態を知る
シェルが現在実行しているジョブの情報を知るには,jobsコマンドを使用します.
%xclock & <RET> %less /home/s01000hf/file3 & <RET> <C-z> ^Z Suspended %xbiff & <RET> %jobs<RET> [1] - Running xclock [2] + Suspended less /home/s01000hf/file3 [3] Running xbiff % _
左端の`[ ]
'の中の数字は``ジョブ番号''といい,シェルがジョブを処理する際にジョブにつける番号です.ジョブを操作するコマンドは,すべてこのジョブ番号を指定して行います.その他の表示の意味を表4.6に示します.
ジョブの操作
ジョブの操作には,表4.7のようなコマンドを用います.いずれも引数としてジョブ番号を指定します.ジョブ番号が省略された場合,killコマンド以外はcurrentジョブが対象となります.
強制終了とサスペンド
実行中のフォアグラウンドジョブを強制終了するには,C-cを押します.また,C-zを押すと,フォアグラウンドで実行されているジョブをサスペンド(一時中断)できます.さらに,サスペンドしたジョブはfgやbg などのコマンドで復帰します.例えばバックグラウンドで起動するジョブを間違えてフォアグラウンドで起動してしまったときに,1度サスペンドをして bgコマンドを実行することで,バックグラウンドジョブに切り替えられます.次にその実行例を示します.
%xlock & <RET> %xdvi report.dvi& <RET> %jobs<RET> [1] - Running xclock [2] + Running xdvi report.dvi %fg %1<RET> <C-z> ^Z Suspended %jobs<RET> [1] + Suspended xclock [2] - Running xdvi report.dvi %bg %1<RET> [1] Running xclock [2] + Running xdvi report.dvi %fg %2<RET> <C-c> ^C %jobs<RET> [1] Running xclock % _
4.4.8 日本語の利用
CNS のUNIX環境では,オンラインマニュアルやエラーメッセージなどは基本的に日本語で表示されます.日本語で表示されない場合は,次のようにロケール値を設定する必要があります.
%setenv LANG [ロケール値]<RET>
表4.8にホストごとのロケール値の設定を示します.
次に実行例を示します.
%setenv LANG ja<RET>
% _
環境変数
ユーザは,環境変数と呼ばれる変数を利用することで,シェルやコマンドの動作を操作できます.現在設定されている環境変数の一覧を表示するには,printenvコマンドを用います.printenvコマンドの後に引数として環境変数名を指定すると,その変数だけが表示されます. 環境変数を設定するには,setenvコマンドを用います.環境変数はコマンドの実行環境を規定し,起動したコマンドにも引き継がれます.
%printenv [環境変数名]<RET> %setenv [環境変数名] [値]<RET>
アプリケーションの中には環境変数に指定された値によって動作を変えるものがあります.次に例を示します.
- X Window Systemのディスプレイ指定
X Window Systemを使ってウィンドウを表示するアプリケーションを起動する場合,環境変数DISPLAYにディスプレイ名を設定することで,その出力先のディスプレイ名を指定できます.なお,ディスプレイ名は通常,利用中のホストにシールで貼ってある名前に`:0.0'を加えたものです.次の例ではディスプレイを`host00:0.0'に指定しています.
%printenv DISPLAY<RET> %setenv DISPLAY host00:0.0<RET> %printenv DISPLAY<RET> host00:0.0 % _