この章では,他の章のように概念や入門的な知識の紹介ではなく,各シェルについての簡略な参照情報を提供します。
この章は,第 7 章で説明しているシェルの概要については理解していることを前提に記述されています。
この章を読み終えると,次のことが可能になります。
オペレーティング・システムのシェル相互間の主な違いを理解する (8.1 節)。
オペレーティング・システムの各シェルの特殊機能を理解する (8.2 節)。
各シェルのローカル・ログイン・スクリプトの特殊性を理解する (8.2.1 項)。
8.1 C,Bourne,Korn,および POSIX シェルの機能の比較
表 8-1 は C シェルおよび Bourne,Korn,および POSIX シェルの主な機能を比較したものです。
表 8-1: C,Bourne,Korn,および POSIX シェルの機能
機能 | 説明 | C | Bourne | Korn または POSIX |
シェル・プログラミング | ループ,条件文,および変数などの機能を含むプログラム言語 | 有 | 有 | 有 |
シグナル・ トラップ | オペレーティング・システムから送られる割り込みやその他のシグナルをトラップするメカニズム | 有 | 有 | 有 |
制限付きシェル | 制御されたシェル環境に限定された機能を与えるセキュリティ機能 | 無 | 有 | 無 |
コマンド別名 | 長いコマンド行の短縮やコマンド名の変更が行える機能 | 有 | 無 | 有 |
コマンド・ヒストリ | コマンドを格納し,そのコマンドの編集と再使用が行える機能 | 有 | 無 | 有 |
ファイル名補完 | ファイル名の一部を入力すると,システムが自動的にそれを補完するか,あるいは選択肢のリストを提示する機能 | 有 | 無 | 有 |
コマンド行編集 | 現在のコマンド行または以前に入力したコマンド行の編集が行える機能 | 有 | 無 | 有 |
配列 | データをグループ化し,名前で呼び出す能力 | 有 | 無 | 有 |
整数算術 | シェル内で算術関数を実行する能力 | 有 | 無 | 有 |
ジョブ制御 | バックグラウンド・プロセスをモニタし,それにアクセスする機構 | 有 | 無 | 有 |
シェルの機能についての詳細は,該当するシェルのリファレンス・ページ,
sh
(1b)sh
(1p)csh
(1)ksh
(1)8.2 C シェルの機能
.cshrc
スクリプトおよび
.login
スクリプトの例
メタキャラクタ
コマンド・ヒストリおよび別名
組み込み変数およびコマンド
8.2.1 .cshrc スクリプトおよび .login スクリプトの例
.cshrc
ログイン・スクリプトは,ローカル・シェル・プロセスのための変数とオペレーティング・パラメータを定義することによって,ユーザの C シェル環境をセットアップします。
.login
スクリプトは,セッションの開始時に実行したい変数やオペレーティング・パラメータ,および,現在のログイン・セッション中,すべてのシェル・プロセスで有効にしたい変数やオペレーティング・パラメータを定義します。
ログインすると,
オペレーティング・システムは,まずホーム・ディレクトリにある
.cshrc
ファイルを実行し,次に
.login
ファイルを実行します。
.login
スクリプトは,ログインしたときにだけ実行されます。
しかし,.cshrc
ファイルは,サブシェルを作成するたびに実行されます。
次に示す
.cshrc
スクリプトでは,シェル変数,コマンド別名,およびコマンド・ヒストリ変数が設定されています。
表 8-2
で,スクリプトの各部分について説明します。
# Set shell variables set noclobber set ignoreeof set notify # Set command aliases alias h 'history \!* | more' alias l 'ls -l' alias c clear # Set history variables set history=40 set savehist=40 # Set prompt set prompt = "\! % "
コマンド | 説明 |
シェル変数 | |
|
ファイルへの重ね書きを禁止する。
これが設定されていると,出力リダイレクション
>
に制限を加えて,ファイルが誤って破壊されないようにし,>>
リダイレクションが既存ファイルを参照するようにする。 |
|
ログイン・セッションを終了させるために Ctrl/D を使用できないことを指定する。
代わりに,exit
または
logout
コマンドを使用しなければならない。 |
|
バックグラウンド・プロセスが完了したときにユーザに通知する。 |
コマンド別名 | |
|
more
コマンドにパイプするコマンド・ヒストリ・バッファの内容を定義する。
文字列
\!*
は,すべてのヒストリ・バッファをパイプするように指定する。 |
|
ディレクトリ・ファイルを詳細なフォーマットでリストする
ls -l
コマンドの簡略名として,l
を定義する。 |
|
画面をクリアする
clear
コマンドの簡略名として,c
を定義する。 |
ヒストリ変数 | |
|
最後の 40 個のコマンドをヒストリ・バッファに格納することをシェルに指示する。 |
|
最後の 40 個のコマンドを格納して,次のログイン・セッションの開始時ヒストリとして使用することをシェルに指示する。 |
プロンプト変数 | |
|
プロンプトを現在のコマンドのコマンド番号を表示するプロンプトに変更する。 |
次の
.login
スクリプトでは,ファイル作成の許可を設定し,PATH
環境変数を設定し,エディタとプリンタを指定します。
表 8-3
で,スクリプトの各部分について説明します。
# Set file creation permissions umask 027 # Set environment variables set path=/usr/bin:/usr/local/bin: set cdpath=.:..:$HOME setenv EDITOR emacs setenv MAILHOST boston setenv PRINTER sales
コマンド | 説明 |
ファイル許可 | |
umask 027 |
プログラムによって新たに作成されるすべてのファイルに対して設定される省略時の許可から差し引く許可を指定する。
umask
の値は,777 (実行可能プログラムの場合) または 666 から差し引かれる。
実行可能プログラムの場合,umask
値 027 を設定すると,所有者に対してはすべての許可を与え,同じグループのメンバに対しては読み取りおよび実行の許可を与え,それ以外のユーザに対してはどの許可も与えないことになる。 |
環境変数 | |
set path \ /usr/bin:/usr/local/bin: |
探索パスを指定する。
この場合,まず
/usr/bin
を探索し,次に
/usr/local/bin
を探索する。 |
set cdpath=.:..:$HOME |
cdpath
は,cd
コマンドの探索パスを設定する変数である。
この変数代入では,cd
コマンドが,現在のディレクトリ (.),親ディレクトリ (..),ホーム・ディレクトリ ($HOME) の順で,指定されたディレクトリを探索するように指定する。 |
setenv EDITOR emacs |
ファイル編集を可能にするプログラムを実行するとき,emacs
を省略時のエディタとして指定する。
たとえば,各種のメール・プログラムでは,エディタを使用して,メッセージを作成したり編集できる。 |
setenv MAILHOST
boston |
boston
をメール・ハンドリング・システムとして指定する。 |
setenv PRINTER sales |
プリンタ
sales
を省略時のプリンタとして指定する。 |
表 8-4
は C シェルのメタキャラクタについて説明したものです。
メタキャラクタとは,シェルにとって特別な意味を持つ文字のことです。
これらのメタキャラクタの意味は,シェル・スクリプト,ファイル名指定で使用される場合,別の文字の引用,入出力で使用される場合,あるいは,可変の置換を示すために使用される場合にグループ分けされます。
表 8-4: C シェルのメタキャラクタ
メタキャラクタ | 説明 |
構文 | |
; |
順次実行するコマンドを区切る。 |
| |
パイプラインを構成するコマンドを区切る。 |
&& |
現在のコマンドが成功した場合に次のコマンドを実行する。 |
| | |
現在のコマンドが失敗した場合に次のコマンドを実行する。 |
( ) |
別個のプロセスとしてサブシェルで実行するコマンドをグループ化する。 |
& |
コマンドをバックグラウンドで実行する。 |
ファイル名 | |
/ |
ファイルのパス名の各部分を区切る。 |
? |
先頭のドット (.) を除く任意の単一文字に対応する。 |
* |
先頭のドット (.) を除く任意の文字シーケンスに対応する。 |
[ ] |
[ ] 内の文字のいずれかの文字に対応する。 |
~ |
ファイル名の先頭に使用する場合には,ホーム・ディレクトリを指定する。 |
引用符 | |
'...' |
' ' で囲まれた文字をいずれも本来の意味で,つまり,シェルにとって特殊な 意味を加えることなく解釈するように指定する。 |
"..." |
特別な引用形式を提供する。 $ (ドル記号),` (抑音符),および \ (バックスラッシュ) 文字はそれぞれの特殊な意味を保持するが," " で囲まれた他のすべての文字は本来の意味に,つまり,シェルにとって特殊な意味を加えることなく解釈するように指定する。 二重引用符は変数代入を行う際に有用である。 |
入出力 | |
< |
入力をリダイレクトする。 |
> |
出力を指定ファイルにリダイレクトする。 |
<< |
入力をリダイレクトし,シェルが入力を指定された行まで読み取ることを指定する。 |
>> |
出力をリダイレクトし,シェルが出力をファイルの終わりに追加することを指定する。 |
>& |
診断および標準出力の両方をリダイレクトして,ファイルに付加する。 |
>>& |
診断および標準出力の両方を,既存ファイルの終わりにリダイレクトする。 |
>! |
出力をリダイレクトする。 また,noclobber 変数が設定されている (ファイルの重ね書きを禁止する) 場合,その設定を無視して,ファイルに重ね書きできるように指定する。 |
置換 | |
$ |
変数置換を指定する。 |
! |
ヒストリ置換を指定する。 |
: |
置換修飾子の前に置く。 |
^ |
特殊な種類のヒストリ置換に使用する。 |
` |
コマンド置換を指定する。 |
コマンド・ヒストリ・バッファは,入力されたコマンドを格納し,そのコマンドをいつでも表示できるようにします。 このため,以前に入力したコマンドやその一部を選択して,再実行することができます。 この機能を利用すれば,長いコマンドを再入力しなくても再使用できるため,時間の節約になります。
.cshrc
ファイルに,次の 3 つのコマンドを記述することができます。
set history=n
入力するコマンド行を格納するヒストリ・バッファを作成します。 n には,ヒストリ・バッファに格納するコマンド行の数を指定します。
set savehist=n
現在のログイン・セッション中に入力したコマンド行を保存して,次のログイン・セッションで利用できるようにします。 n には,ログアウト時にヒストリ・バッファに格納するコマンド行の数を指定します。
set prompt=[\!] %
C シェル・プロンプトに,各コマンド行の番号を表示させます。
コマンド・ヒストリ・バッファの内容を見るときには,history
コマンドを使用します。
すると,次のような出力が表示されます (実際の表示は異なります)。
[18] % history 3 set history=15 4 pwd 5 cd /usr/sales 6 ls -l 7 cp report report5 8 mv /usr/accounts/new . 9 cd /usr/accounts/new 10 mkdir june 11 cd june 12 mv /usr/accounts/new/june . 13 ls -l 14 cd /usr/sales/Q1 15 vi earnings 16 cd /usr/chang 17 vi status 18 history [19] % _
コマンド・ヒストリ・バッファ内のコマンドを再実行するには,表 8-5
に示すコマンドを使用します。
各コマンドは感嘆符 (!) で始まっています。
これは,ユーザがヒストリ・バッファ内のコマンドを使用していることを C シェルに知らせるものです。
表 8-5: ヒストリ・バッファ内のコマンドの再実行
コマンド | 説明 |
|
直前のコマンドを再実行する。 |
|
n
で指定したコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合,!5
によって
cd /usr/sales
コマンドが再実行される。 |
|
現在のコマンドに相対して以前のコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合,!-2
によってコマンド番号
17
の
vi status
コマンドが呼び出される。 |
|
string
によって指定される文字列で始まる最後に実行されたコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合,!cp
によってコマンド番号
7
の
cp report report5
が呼び出される。 |
|
string
によって指定される文字列と同じ文字列を含む最後に実行されたコマンド行を再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合,!?Q1
によってコマンド番号
14
の
cd /usr/sales/Q1
が呼び出される。 |
コマンド・ヒストリ・バッファを使用すると,以前のコマンド引数を再使用することも以前のコマンド行を修正することもできます。
これらの機能については,
csh
(1)8.2.4 ファイル名補完
C シェルでは,シェル・プロンプトに対してファイル名またはパス名の一部を入力すると,シェルが自動的にその名前を照合して補完します。 この機能により,長い一意のファイル名を表示する場合に,時間の節約ができます。
たとえば,現在のディレクトリに
meetings_sales_status
というファイルがあるとします。
このファイルの詳細なリストを表示させるには,次のコマンドを入力します。
% ls -l meetings[Escape]
システムは同じコマンド行に次のように表示します。
% ls -l meetings_sales_status
ここで,Return キーを押せばコマンドを実行できます。
ファイル名補完についての詳細は,
csh
(1)8.2.5 別名
コマンド別名機能を使用すると,長いコマンド行を短縮したり,コマンドの名前を変更することができます。 これは,頻繁に使用する長いコマンド行に対して別名を作成することにより行います。
たとえば,/usr/chang/reports/status
というディレクトリに頻繁に移動する必要があるとします。
その場合には,status
という別名を作成して,コマンド行にその別名を入力するだけで,いつでもそのディレクトリに移動できるようにします。
さらに,別名を使用すると,コマンドに対してもっとわかりやすい名前を定義することができます。
たとえば,mv
コマンドに対して
rename
という別名を定義することもできます。
別名を作成するには,alias
コマンドを使用します。
alias
コマンドの形式は次のとおりです。
alias
aliasname command
aliasname には,使用したい名前を指定します。 command には,元のコマンドあるいは一連のコマンドを指定します。 command が複数の部分に分かれている (間にスペースがある) 場合は,式全体を一重引用符 (' ') で囲んでください。
たとえば,/usr/chang/reports/status
というディレクトリに移動するための別名
status
を作成するには,次のコマンドを入力します。
% alias status 'cd /usr/chang/reports/status'
別名を定義する場合には,通常
.cshrc
ファイルに記述して,ユーザ環境の永続的な要素にします。
こうしておけば,ログインしたり,新しいシェルを開始するたびに,その別名を使用することができます。
例については,8.2.1 項を参照してください。
すべての別名定義を表示するには,次のコマンドを入力します。
% alias
特定の別名定義を表示するには,次のように入力します。
% alias aliasname
aliasname には,定義を表示させる特定の別名を指定します。
現在のログイン・セッションについて別名を削除するには,unalias
コマンドを使用します。
unalias
コマンドの一般形式は次のとおりです。
unalias
aliasname
aliasname には,削除する名前を指定します。
現在および将来のログイン・セッションのすべてについて別名を削除するには,次のようにします。
次のコマンドを入力する。
% unalias aliasname
aliasname には,削除する別名を指定します。
.cshrc
ファイルを編集して,その別名定義を削除した後,ファイルを保存する。
次のコマンドを入力して,.cshrc
ファイルを再実行する。
% source .cshrc
C
シェルにおける別名使用の詳細については,
csh
(1)8.2.6 組み込み変数
C シェルには,値を代入できる変数が用意されています。 これらの変数は,後でコマンドで使用できる値を格納するのに非常に役立ちます。 さらに,シェル自体が参照する変数を設定することによって,シェルの動作に直接影響を与えることができます。
表 8-6
では,一般ユーザにとって重要な C シェルの組み込み変数について説明しています。
C
シェルの組み込み変数の完全な一覧については,
csh
(1)
変数 | 説明 |
argv |
シェルまたはシェル・スクリプトで使用できる 1 つまたは複数の値。 |
cwd |
現在のディレクトリのパス名。
この変数の値は,cd
コマンドを実行するたびに変更される。 |
home |
ホーム・ディレクトリのパス名。
この変数の省略値は,/etc/passwd
ファイルで指定される。 |
ignoreeof |
システムからログアウトするために Ctrl/D を使用できるかどうかを指定する。
これが設定されている場合は,ログアウトするには
logout
または
exit
を使用しなければならない。
設定されていない場合には,Ctrl/D を使用してログアウトできる。
この変数は通常
.cshrc
ファイルで設定される。 |
cdpath |
cd ,chdir ,または
pushd
コマンドでサブディレクトリを探すとき,システムが探索する代替ディレクトリを指定する。
この変数は通常
.login
ファイルで設定される。 |
noclobber |
ファイルに重ね書きできるかどうかを指定する。
これが設定されている場合は,出力リダイレクション
>
に制限を加えて,ファイルが誤って破壊されないようにし,
また
>>
リダイレクションが既存ファイルを参照するようにする。
この変数が設定されていれば,ファイルに重ね書きができない。
この変数は通常
.cshrc
ファイルで設定される。 |
notify |
バックグラウンド・プロセスが完了したことを知らせるかどうかを指定する。
設定されている場合は,完了を通知する。
設定されていない場合は,完了したことを通知しない。
この変数は通常
.cshrc
ファイルで設定される。 |
path |
シェルがコマンドを見つけるために使用する探索パスを指定する。
この変数は通常
.login
ファイルで設定される。 |
prompt |
C シェル・プロンプトのカスタマイズに使用できる。
この変数は通常
.cshrc
ファイルで設定される。 |
shell |
プログラムが新しいサブシェルを作成するときに作成されるシェルを指定する。
この変数は通常
.login
ファイルで設定される。 |
status |
最後に実行したコマンドがエラーなしで完了した (ゼロの値が返される) か,エラーが生じて完了した (非ゼロの 値が返される) かを指定する。 |
表 8-7
は,一般ユーザにとって重要な C シェルのコマンドを説明しています。
C
シェルの組み込みコマンドの完全な一覧については,
csh
(1)
コマンド | 説明 |
|
別名定義を割り当てて,表示する。 [脚注 2] |
|
中断したプロセスをバックグラウンドに入れる。 [脚注 3] |
|
引数をシェルの標準出力に書き込む。 |
|
現在バックグラウンドで実行しているプロセスをフォアグラウンドに入れる。 [脚注 3] |
|
コマンド・ヒストリ・バッファの内容を表示する。 [脚注 4] |
|
現在のバックグラウンド・プロセスのジョブ番号と PID 番号を表示する。 [脚注 3] |
|
ログイン・セッションを終了する。 |
|
コマンド位置のハッシュ・テーブルを再計算するようシェルに指示する。
シェルの探索パスにあるディレクトリにコマンドを追加したとき,シェルがそのコマンドを見つけられるようにしたい場合に,このコマンドを使用する。
rehash
を使用しない場合は,ハッシュ・テーブルが当初作成されたときにそのコマンドがディレクトリになかったため,そのコマンドは実行できない。 |
|
コマンドを指定回数だけ反復する。 |
|
シェル変数値を割り当てて,表示する。 [脚注 5] |
|
環境変数値を割り当てる。 [脚注 5] |
|
ファイル内のコマンドを実行する。 これにより,現在のシェル環境を更新することができる。 [脚注 6] |
|
指定コマンドの実行時間を表示する。 |
|
別名定義を削除する。 [脚注 2] |
|
変数に割り当てられていた値を削除する。 [脚注 5] |
|
環境変数に割り当てられていた値を削除する。 [脚注 5] |
この節では,次の Bourne シェル機能について説明します。
.profile
ログイン・スクリプトの例
メタキャラクタ
組み込み変数
組み込みコマンド
ログイン・シェルが Bourne シェルである場合,オペレーティング・システムは.profile
ログイン・スクリプトを実行して,ユーザ環境をセットアップします。
エクスポートされる
.profile
ログイン・スクリプトの変数は,作成されるすべてのサブシェルおよびサブプロセスに渡されます。
エクスポートされない変数は,ログイン・シェルだけで使用されます。
次の
.profile
ログイン・スクリプトでは,シェル変数を設定してエクスポートし,ログアウト・スクリプトのためにトラップを設定し,また情報を表示するようシステムに指示します。
表 8-8
で,スクリプトの各部分について説明します。
# Set PATH PATH=/usr/bin:/usr/local/bin: # Export global variables export PATH # Set shell variables PS1='$LOGNAME $ ' CDPATH=.:..:$HOME # Set up for logout script trap "echo logout; $HOME/.logout" 0 # Display status information date echo "Currently logged in users:" ; users
表 8-8: Bourne シェルの .profile スクリプト例の説明
コマンド | 説明 |
探索パスの設定 | |
PATH=/usr/bin:/usr/local/bin: |
探索パスを指定する。
この場合,まず/usr/bin
が探索され,次に
/usr/local/bin
が探索される。 |
探索パスのエクスポート | |
export PATH |
実行するすべてのコマンドに探索パスが渡されるように指定する。 |
シェル変数の設定 | |
PS1='$LOGNAME $ ' |
PS1
変数は Bourne シェル・プロンプトを指定する変数であり,その省略値は
$
である。
この変数代入は,プロンプトを
username
$
に変更するによう指定する。
たとえば,ユーザ名が
amy
である場合には,プロンプトは
amy $
になる。 |
CDPATH=.:..:$HOME
|
CDPATH
変数は,cd
コマンドの探索パスを設定する。
この変数代入では,cd
コマンドが,現在のディレクトリ (.),親ディレクトリ (..),ホーム・ディレクトリ ($HOME) の順で,指定されたディレクトリを探索するように指定する。 |
ログイン・スクリプトのセットアップ | |
trap "echo logout;
$HOME/.logout" 0 |
trap
コマンドが終了信号 (0) を受け取ると,シェルが
logout
を表示して,.logout
スクリプトを実行するように指定する。
[脚注 7]
|
状態情報の表示 | |
date |
日時を表示する。 |
表 8-9
は,Bourne シェルのメタキャラクタ (シェルにとって特別な意味を持つ文字) について説明しています。
これらのメタキャラクタの意味は,シェル・スクリプト,ファイル名指定で使用される場合,別の文字の引用,入出力で使用される場合,あるいは,可変の置換を示すために使用される場合にグループ分けされます。
表 8-9: Bourne シェル・メタキャラクタ
メタキャラクタ | 説明 |
構文 | |
| | パイプラインを構成するコマンドを区切る。 |
&& | 現在のコマンドが成功した場合に次のコマンドを実行する。 |
| | | 現在のコマンドが失敗した場合に次のコマンドを実行する。 |
; | 順次実行するコマンドを区切る。 |
;; | case 構造の構成要素を区切る。 |
& | コマンドをバックグラウンドで実行する。 |
( ) | 別個のプロセスとしてサブシェルで実行するコマンドをグループ化する。 |
ファイル名 | |
/ | ファイルのパス名の各部分を区切る。 |
? | 先頭のドット (.) を除く任意の単一文字に対応する。 |
* | 先頭のドット (.) を除く任意の文字列に対応する。 |
[ ] | [ ] 内のいずれかの文字に対応する。 |
引用符 | |
\ | 次の文字を本来の意味で,すなわち,シェルに対して特殊な意味を加えることなく解釈することを指定する。 |
'...' | ' 'で囲まれた文字('を除く)をすべて本来の意味で,すなわち,シェルにとって特殊 な意味を加えることなく解釈することを指定する。 |
"..." | 特別な引用形式を提供する。 $ (ドル記号),` (抑音符),および \ (バックスラッシュ)文字はそれぞれの特殊な意味を保持するが," " で囲まれた他の文字はすべて本来の意味に,すなわち,シェルに対する特殊な意味を加えることなく解釈することを指定する。 二重引用符は変数代入を行う際に有用である。 |
入出力 | |
< | 入力をリダイレクトする。 |
> | 出力を指定ファイルにリダイレクトする。 |
<< | 入力をリダイレクトし,シェルが入力を指定行まで読み取るように指定する。 |
>> | 出力をリダイレクトし,シェルが出力をファイルの終わりに追加するように指定する。 |
2> | 診断出力を指定ファイルにリダイレクトする。 |
置換 | |
${...} | 変数置換を指定する。 |
`...` | コマンド出力置換を指定する。 |
Bourne シェルには,値を代入できる変数が用意されています。 シェルはこれらの変数のいくつかを設定し,ユーザは全部の変数を設定または再設定することができます。
表 8-10
に,一般ユーザにとって重要な Bourne シェルの組み込み変数を示します。
Bourne
シェルの組み込み変数に関する完全な情報については,
sh
(1b)
変数 | 説明 |
|
ログイン・ディレクトリ,つまりログインが完了すると現在のディレクトリになるディレクトリの名前を指定する。
cd
コマンドは省略時の値として
HOME
の値を使用する。
HOME
は
login
コマンドで設定される。 |
|
システムがコマンドを探索して実行するディレクトリを指定する。
シェルはここで指定された順序でこれらのディレクトリを探索する。
通常,
PATH
変数は
.profile
ファイルで設定される。 |
|
cd
コマンドが
cd
に対して指定された引数を探索するディレクトリを指定する。
cd
コマンドの引数が空であるか,スラッシュ (/),ドット (.),またはドット・ドット (..) で始まる場合,
CDPATH
は無視される。
通常,
CDPATH
は
.profile
ファイルで設定される。 |
|
ユーザのメールを格納するファイルのパス名。
ユーザは
MAIL
を設定する必要があり,これは通常
.profile
ファイルで行う。 |
|
シェルがメールの有無をチェックする頻度を秒数で指定する (省略時の値は 600秒)。
この変数の値を 0 に設定すると,シェルは各プロンプトを表示する前にメールの有無をチェックする。
通常,
MAILCHECK
は
.profile
ファイルで設定される。 |
|
省略時のシェルを指定する。
この変数は
.profile
ファイルで設定されて,エクスポートされる。 |
|
省略時の Bourne シェル・プロンプトを指定する。
省略時の値は
$ 。
PS1
は通常
.profile
ファイルで設定される。
PS1
が設定されていない場合,シェルは標準一次プロンプト文字列を使用する。 |
|
二次プロンプト文字列を指定する。
二次プロンプト文字列とは,ユーザがコマンド行を入力した後で,シェルがもっと多くの入力を必要とするときに表示する文字列である。
標準二次プロンプト文字列は
>
の後にスペースが 1 つ続いたものである。
PS2
は通常,ユーザの
.profile
ファイルで設定される。
PS2
が設定されていない場合,シェルは標準二次プロンプト文字列を使用する。 |
表 8-11
で,一般ユーザにとって重要な Bourne シェルのコマンドを示します。
Bourne
シェルの組み込みコマンドの完全な一覧については,
sh
(1b)
コマンド | 説明 |
|
ディレクトリの変更を可能にする。
ディレクトリを指定しない場合には,
HOME
シェル変数の値が使用される。
CDPATH
シェル変数がこのコマンドの探索パスを定義する。
[脚注 8]
|
|
標準出力に引数を書き込む。 [脚注 9] |
|
指定された変数を,その後に実行されるコマンドの環境に自動的にエクスポートするためにマークする。 |
|
現在のディレクトリを表示する。 [脚注 10] |
|
変数値を代入して表示する。 [脚注 11] |
|
シェルから実行されたプロセスの累積ユーザおよびシステム時間を表示する。 |
|
シェルが指定信号を受け取ると,指定コマンドを実行する。 [脚注 11] |
|
新しく作成されたすべてのファイルについて,差し引く許可を指定する。 [脚注 12] |
|
変数に代入されていた値を削除する。 [脚注 11] |
POSIX シェルは,IEEE POSIX.2 規格準拠を示す Korn シェルのもう 1 つの指名子です。 この節では,次の Korn または POSIX シェルの機能について説明します。
.profile
および
.kshrc
ログイン・スクリプトの例
メタキャラクタ
コマンド・ヒストリ
コマンド行編集
ファイル名補完
別名
組み込み変数およびコマンド
8.4.1 .profile および .kshrc ログイン・スクリプトの例
ログイン・シェルが Korn または POSIX シェルである場合,オペレーティング・システムはホーム・ディレクトリにある
.profile
ログイン・スクリプトを処理します。
.profile
ログイン・スクリプトは環境変数を定義します。
これらの変数は,ログイン・シェルで使用されるとともに,作成されたサブシェルやサブプロセスでも使用されます。
.profile
ログイン・スクリプトは,ログインしたときにだけ実行されます。
.kshrc
ログイン・スクリプトは,ローカル・シェル・プロセスのための変数とオペレーティング・パラメータを定義することによって,Korn または POSIX シェル 環境をセットアップします。
このログイン・スクリプトは,サブシェルを作成するたびに実行されます。
注意
ホーム・ディレクトリに
.kshrc
ファイルを作成する前に,.profile
でENV=$HOME/.kshrc
環境変数が設定されて,エクスポートされていることを確認してください。 1 度これを行うと,.kshrc
ログイン・スクリプトはログイン時とサブシェルの作成時に必ず実行されます。
次の
.profile
ログイン・スクリプトでは,グローバル環境変数を設定してエクスポートするとともに,シェル変数を設定します。
表 8-12
でスクリプトの各部分について説明しています。
# Set environment variables PATH=/usr/bin:/usr/local/bin: ENV=$HOME/.kshrc EDITOR=vi FCEDIT=vi PS1="'hostname' [!] $ " # Export global variables export PATH ENV EDITOR FCEDIT PS1 # Set mail variables MAIL=/usr/spool/mail/$LOGNAME MAILCHECK=300
表 8-12: Korn または POSIX シェルの .profile ログイン・スクリプトの例の説明
コマンド | 説明 |
環境変数の設定 | |
PATH=/usr/bin:/usr/local/bin |
探索パスを指定する。
この場合,まず
/usr/bin
を探索し,次に
/usr/local/bin
を探索する。 |
ENV=$HOME/.kshrc |
$HOME/.kshrc
をログイン・スクリプトとして指定する。 |
EDITOR=vi |
vi
を,シェル・プロンプトにおけるコマンド行編集とファイル名補完のための省略時のエディタとして指定する。 |
FCEDIT=vi |
vi
を,fc
コマンドの省略時のエディタとして指定する。
[脚注 13]
|
PS1="`hostname`
[!] $ " |
PS1
変数は Korn または POSIX シェルのプロンプトを指定する変数で,その省略時の値は
$
である。
この変数を代入すると,プロンプトを変更して,hostname
コマンドの出力の後に現在のコマンドのコマンド番号とドル記号 ($) を続けて表示する。
たとえば,システム名が
boston
で,現在のコマンドの番号が
30
である場合,プロンプトは
boston[30] $
となる。 |
グローバル変数のエクスポート | |
export PATH
ENV EDITOR FCEDIT PS1 |
PATH,ENV,EDITOR,FCEDIT,および PS1 の変数の値をすべてのサブシェルにエクスポートするように指定する。 |
メール変数の設定 | |
MAIL=/usr/spool/mail/$LOGNAME |
メール・システムが新たなメールの到着を検出するために使用するファイルのパス名を指定する。
この場合,メール・システムは
/usr/spool/mail
ディレクトリの下にあるユーザ名のサブディレクトリを探索する。 |
MAILCHECK=300 |
シェルが 300 秒 (5 分) ごとにメールをチェックすることを指定する。 |
次の
.kshrc
ログイン・スクリプトでは,シェル変数,コマンド別名,およびコマンド・ヒストリ変数が設定され,作成されたファイルに対する許可も設定されます。
表 8-13
でスクリプトの各部分について説明します。
# Set shell variables set -o monitor set -o trackall # Set command aliases alias rm='rm -i ' alias rename='mv ' alias l 'ls -l' alias c clear # Set history variables HISTSIZE=40 # Set file creation permissions umask 027
表 8-13: .kshrc ログイン・スクリプトの例の説明
コマンド | 説明 |
シェル変数 | |
set -o
monitor |
シェルがすべてのバックグラウンド・プロセスをモニタし,プロセス終了時に完了メッセージを表示するように指定する。 |
set -o
trackall |
ユーザの実行するすべてのコマンドをシェルが追跡するように指定する。 コマンドを追跡すると,シェルはコマンドの位置を保存して,次にそのコマンドを入力するとき迅速に見つけてくれる。 |
コマンド別名 | |
alias rm='rm -i' |
rm
コマンドで,ファイル削除の確認を求めるプロンプトを表示する
-i
オプションの使用を指定する。 |
alias rename='mv' |
rename
を
mv
コマンドの新しい名前として指定する。 |
alias l='ls -l' |
ディレクトリ・ファイルを詳細なフォーマットでリストする
ls -l
コマンドの簡略名を定義する。 |
alias c='clear' |
画面をクリアする
clear
コマンドの簡略名を定義する。 |
ヒストリ変数 | |
HISTSIZE=40 |
最後の 40 個のコマンドをヒストリ・バッファに格納するようにシェルに指示する。 |
ファイル許可の設定 | |
umask 027 |
新しく作成されたすべてのファイルについての許可を指定する。 このコマンドは所有者に対してはすべての許可を与え,同じグループのメンバに対しては読み取りおよび実行の許可を与え,それ以外のすべてのユーザに対してはどんな許可も与えない。 umask はサブシェルへは継承されない。 |
表 8-14
は Korn または POSIX シェルのメタキャラクタについて説明したものです。
メタキャラクタとは,シェルにとって特別な意味を持つ文字のことです。
これらのメタキャラクタの意味は,シェル・スクリプト,ファイル名指定で使用される場合,別の文字の引用,入出力で使用される場合,あるいは,可変の置換を示すために使用される場合にグループ分けされます。
表 8-14: Korn または POSIX シェルのメタキャラクタ
メタキャラクタ | 説明 |
構文 | |
| | パイプラインを構成するコマンドを区切る。 |
&& | 現在のコマンドが成功した場合に次のコマンドを実行する。 |
| | | 現在のコマンドが失敗した場合に次のコマンドを実行する。 |
; | 順次実行するコマンドを区切る。 |
;; | case 構造の構成要素を区切る。 |
& | コマンドをバックグラウンドで実行する。 |
( ) | 別個のプロセスとしてサブシェルで実行するコマンドをグループ化する。 |
{ } | サブシェルを作成せずにコマンドをグループ化する。 |
ファイル名 | |
/ | ファイルのパス名の各部分を区切る。 |
? | 語頭のドット (.) を除く任意の単一文字に対応する。 |
* | 語頭のドット (.) を除く任意の文字列に対応する。 |
[ ] | [ ] 内のいずれかの文字に対応する。 |
~ | ファイル名の先頭に用いると,ホーム・ディレクトリを指定する。 |
引用符 | |
\ | 次の文字を本来の意味で,つまり,シェルに対する特殊な意味を加えることなく解釈することを指定する。 |
'...' | ' ' で囲まれた文字 ('
を除く) を本来の意味で,つまり,シェルに対する特殊な意味を加えることなく解釈することを指定する。 |
"..." | 特別な引用形式を提供する。 ドル記号 ($),抑音符 (`),バックスラッシュ (\),および右カッコ [)] 文字はそれぞれの特殊な意味を保持するが," " で囲まれた他のすべての文字は本来の意味に,つまり,シェルにとって特殊な意味を加えることなく解釈することを指定する。 二重引用符 (" ") は変数代入を行う際に有用である。 |
入出力 | |
< | 入力をリダイレクトする。 |
> | 出力を指定ファイルにリダイレクトする。 |
<< | 入力をリダイレクトし,シェルが入力を指定された行まで読み取ることを指定する。 |
>> | 出力をリダイレクトし,シェルが出力をファイルの終わりに追加することを指定する。 |
>& | 診断および標準出力の両方をリダイレクトして,ファイルに付加する。 |
置換 | |
${...} | 変数置換を指定する。 |
% | ジョブ番号の置換を指定する。 |
`...` | コマンド出力の置換を指定する。 |
コマンド・ヒストリ・バッファは,入力されたコマンドを格納し,いつでもそのコマンドを表示できるようにします。 このため,以前に入力したコマンドやその一部を選択して,再実行することができます。 この機能を利用すれば,長いコマンドを再入力しなくても再使用できるため,時間の節約になります。
コマンド・ヒストリ・バッファの内容を見るときには,history
コマンドを使用します。
すると,例 8-1
ような出力が表示されます (実際の出力は異なります)。
例 8-1: ksh ヒストリの出力例
[18] $ history 3 ls -l 4 pwd 5 cd /usr/sales 6 ls -l 7 cp report report5 8 mv /usr/accounts/new . 9 cd /usr/accounts/new 10 mkdir june 11 cd june 12 mv /usr/accounts/new/june . 13 ls -l 14 cd /usr/sales/Q1 15 vi earnings 16 cd /usr/chang 17 vi status [19] $
コマンド・ヒストリ・バッファ内のコマンドを再実行するには,表 8-15
に示すコマンドを使用します。
各コマンドは英字
r
で始まっていることに注意してください。
コマンド | 説明 |
|
直前のコマンドを再実行する。 |
|
nで指定したコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合, |
|
現在のコマンドに相対して以前のコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合, |
|
string
によって指定される文字列で始まる最後に実行されたコマンドを再実行する。
たとえば,前述の例で示したヒストリ・バッファの場合, |
ヒストリ・バッファ・コマンドの再実行についての詳細は,
ksh
(1)
ヒストリ・バッファに格納するコマンドの数を増減したい場合は,.profile
ファイルで
HISTSIZE
変数を設定します。
この変数の形式は次のとおりです。
HISTSIZE=
n
n には,ヒストリ・バッファに格納するコマンド行数を指定します。
たとえば,ヒストリ・バッファに 15 個のコマンドを格納するには,次のコマンドを使用します。
HISTSIZE=15
Korn または POSIX シェルでは,現在のコマンド行を編集するだけでなく,コマンド・ヒストリ・バッファに格納されているコマンドを再使用することもできます。
この機能を使用するには,vi
や
emacs
のようなテキスト・エディタの使用方法を知らなければなりません。
これらの機能についての詳細は,次の項を参照してください。
8.4.4 fc コマンドを使用したコマンド行編集
Korn または POSIX シェルでは,コマンド・ヒストリ・バッファ内のコマンド行を表示したり,編集したり,あるいはその両方をすることができます。 このため,以前に実行したコマンド行の一部を修正してから,そのコマンドを再実行することができます。
Korn または POSIX シェルのコマンド行編集機能は広範囲にわたっています。
この項では,最も基本的な機能だけを取り上げます。
詳細については,
ksh
(1)sh
(1p)
コマンド・ヒストリ・バッファを表示したり,その内容を編集したり,あるいはその両方をするには,組み込みコマンドの
fc
(fix command) を使用します。
fc
コマンドには,次の 2 つの形式があります。
fc
[ -e editor
]
[ -nlr
]
[ first
]
[ last
]
このコマンド形式を使用すると,バッファ内のコマンド行をいくつでも表示して編集することができます。
-e
editor
変数には,コマンド行の編集に使用したいエディタ (通常は
vi
または
emacs
) を指定します。
-e
を指定しなければ,fc
コマンドはコマンド行を表示しますが,それを編集することはできません。
-n
フラグは,バッファ内のコマンド行を,番号を付けずに表示することを指定します。
バッファ内のコマンド行を,番号を付けて表示することを指定するには,-l
フラグを使用します。
行番号や行番号の範囲を指定しない場合は,入力した最後の 16 行が表示されます。
-r
フラグは,バッファ内のコマンド行を逆順で表示することを指定します。
first および last 変数には,バッファ内のコマンド行の範囲を指定します。 指定は番号でも文字列でも行うことができます。
-e
フラグに対して省略時のエディタを指定したい場合は,.profile
スクリプトで
FCEDIT
変数を定義します。
たとえば,emacs
を省略時のエディタにする場合は,次の変数定義を入力してください。
FCEDIT=emacs
fc
-e -
[old=new
]
[string
]
このコマンド形式を使用すると,以前に入力した任意のコマンド行内の old 文字列を直ちに new 文字列に置き換えることができます。
-e -
は,置換を行うことを指定します。
old=new は,old 文字列を直ちに new 文字列に置き換えることを指定します。
string は,Korn または POSIX シェルが string を含むバッファ内の一番新しいコマンド行に対して編集を行うことを指定します。
次の項では,fc
を使用する例をいくつか紹介します。
Korn または POSIX シェルでは,シェル・プロンプトで,vi
または
emacs
エディタに類似したコマンド・セットを使用して,個々のコマンド行を編集することもできます。
この機能についての詳細は,
ksh
(1)sh
(1p)8.4.4.1 コマンド行編集の例
コマンド行 15 から 18 までを表示するには,次のように入力します。
$ fc -l 15 18 15 ls -la 16 pwd 17 cd /u/ben/reports 18 more sales $
同じコマンド行を,行番号ではなくコマンド文字列を指定することによって,表示することもできます。 次にその例を示します。
$ fc -l ls more 15 ls -la 16 pwd 17 cd /u/ben/reports 18 more sales $
vi
エディタを使用して,コマンド行 15 から 18 までを表示して編集するには,次のように入力します。
$ fc -e vi 15 18 ls -la pwd cd /u/ben/reports more sales ~ ~ ~ ~
編集を終えたら,:wq!
コマンドを使用して,ファイルを書き込んで終了します。
ファイル内のそのコマンド行は再実行することができます。
echo hello
コマンドを入力した直後,hello
を
goodbye
に置き換えたいとします。
置換を行って,コマンド行を再実行するには,次のように入力します。
$ echo hello hello $ fc -e - hello=goodbye echo echo goodbye goodbye
fc
コマンドとコマンド行編集についての詳細は,
ksh
(1)8.4.5 ファイル名補完
Korn または POSIX シェルでは,シェル・プロンプトに対してファイル名またはパス名の一部を入力すると,シェルが自動的にその名前を照合して補完します。 基準と一致するファイル名またはパス名が 2 つ以上存在する場合,シェルは基準と一致するものをすべて表示します。
ファイル名補完メカニズムを使用するには,.profile
ファイルで
EDITOR
変数を定義します。
たとえば,vi
エディタを使用したい場合には,.profile
ファイルに次の変数定義を入力してください。
EDITOR=vi
ファイル名補完がどのように行われるかを具体的に示すため,使用しているエディタが
vi
であり,現在のディレクトリに
salesreportjan
,salesreportfeb
,salesreportmar
という 3 つのファイルがあるとします。
ls -l
コマンドでファイル補完機能を使用するには,次のように入力します。
$ ls -l salesreport[Escape] = 1) salesreportfeb 2) salesreportjan 3) salesreportmar $ ls -l salesreport
システムは入力されたコマンドを再表示し,カーソルは
salesreport
の終わりにあります。
ここで
salesreportjan
を選びたいとします。
その場合には,a
(vi
の append コマンド) とタイプした後に,jan
と入力して Return キーを押してください。
すると,salesreportjan
の詳細なリストが表示されます。
ファイル名補完についての詳細は,
ksh
(1)sh
(1p)8.4.6 別名
コマンド別名機能を使用すると,長いコマンド行を短縮したり,コマンドの名前を変更することができます。 これは,頻繁に使用するコマンド行に対して別名を作成することにより行います。
たとえば,頻繁にディレクトリ
/usr/chang/reports/status
に移動する必要があるとします。
その場合には,別名
status
を作成して,コマンド行にその別名を入力すれば,いつでもそのディレクトリに移動できるようにします。
さらに,別名を使用すると,コマンドに対してもっとわかりやすい名前を付けることができます。
たとえば,mv
コマンドに対して
rename
という別名を定義することもできます。
別名を作成するには,alias
コマンドを使用します。
alias
コマンドの一般形式は次のとおりです。
alias
aliasname=command
aliasname には,使用したい名前を指定します。 command には,元のコマンド,あるいは一連のコマンドを指定します。 command が複数の部分に分かれている (間にスペースがある) 場合は,式全体を一重引用符で囲んでください。
たとえば,/usr/chang/reports/status
というディレクトリに移動するための別名status
を作成するには,次のコマンドを入力します。
alias status='cd /usr/chang/reports/status'
別名の定義は,通常
.kshrc
ファイルに入れておくことによって行います。
こうしておくと,ログインしたり,新しいシェルを開始するたびに,その別名を使用することができます。
例については,8.4.1 項を参照してください。
すべての別名定義を表示するには,次のコマンドを入力します。
$ alias
特定の別名定義を表示するには,次のように入力します。
% alias aliasname
aliasname には,定義を表示させる特定の別名を指定します。
Korn または POSIX シェルでは,ユーザが作成した別名をエクスポートすることができます。 エクスポートした別名は,作成されるすべてのサブシェルにも渡されるため,シェル・プロシージャや新しいシェルを実行するときに,定義された別名を使用することができます。 エクスポートしていない別名は,ログイン・シェルでしか使用することができません。
別名をエクスポートするには,次の形式の
alias
コマンドを使用します。
alias -x
aliasname=command
-x
フラグは別名をエクスポートすることを示します。
aliasname
には,使用したい名前を指定します。
command
には,元のコマンド,あるいは一連のコマンドを指定します。
command
が複数の部分に分かれている (間にスペースがある) 場合は,式全体を一重引用符で囲んでください。
たとえば,rm
コマンドの別名定義をエクスポートするには,次のように入力します。
alias -x rm='rm -i '
このコマンドは,次の 2 つのいずれかの方法で入力することができます。
ログインするたびに別名をエクスポートしたい場合は,.kshrc
または
.profile
ファイルを編集する。
現在のログイン・セッションでのみ別名をエクスポートしたい場合は,コマンド行で別名をエクスポートする。
現在のログイン・セッションについて別名を削除するには,unalias
コマンドを使用します。
unalias
コマンドの一般形式は次のとおりです。
unalias
aliasname
aliasname には,削除したい別名を指定します。
現在および将来のログイン・セッションのすべてについて別名を削除するには,次のようにします。
次のコマンドを入力する。
$ unalias aliasname
aliasname には,削除したい別名を指定します。
.kshrc
ファイル (または,別名定義を含むファイル) を編集して,その別名定義を削除した後,ファイルを保存する。
次のコマンドを入力して,.kshrc
ファイルを再実行する。
$ . ./.kshrc
Korn または POSIX シェルは,この他にも別名機能を備えています。
Korn または POSIX
シェルにおける別名使用についての詳細は,
ksh
(1)sh
(1p)8.4.7 組み込み変数
Korn および POSIX シェルには,値を代入できる変数が用意されています。 シェルはこれらの変数のいくつかを設定し,ユーザは全部の変数を設定または再設定することができます。
表 8-16
に,一般ユーザにとって重要な Korn または POSIX シェルの組み込み変数を示します。
Korn または POSIX
シェルの組み込み変数に関する完全な情報については,
ksh
(1)sh
(1p)
表 8-16: 組み込み Korn または POSIX シェル変数
変数 | 説明 |
HOME |
ログイン・ディレクトリ名を指定する。
|
|
システムがコマンドを探索して実行するディレクトリを指定する。
シェルはここで指定された順序でこれらのディレクトリを探索する。
通常,
|
|
|
|
ユーザのメールを格納するファイルのパス名。
|
|
シェルがメールの有無をチェックする頻度を秒数で指定する (省略時の値は 600 秒)。
この変数の値を 0 に設定すると,シェルは各プロンプトを表示する前にメールの有無をチェックする。
通常,
|
|
省略時のシェルを指定する。
この変数は
|
|
省略時の Korn または POSIX シェル・プロンプトを指定する。
省略時の値は
|
|
二次プロンプト文字列を指定する。
二次プロンプト文字列とは,ユーザがコマンド行を入力した後で,シェルがもっと多くの入力を必要とするときに表示する文字列である。
標準二次プロンプト文字列は
|
|
コマンド・ヒストリの格納に使用するファイルのパス名を指定する。
この変数は通常
|
|
シェル・プロンプトでのコマンド行編集とファイル名補完のための省略時のエディタを指定する。
この変数は通常
|
|
|
|
このシェルでアクセス可能な以前に入力したコマンドの数を指定する。
省略時の値は 128。
この変数は通常
|
表 8-17
に,一般ユーザにとって重要な Korn または POSIX シェルのコマンドを示します。
シェルの組み込みコマンドの完全な一覧,または,リストされているコマンドの詳細については,
ksh
(1)sh
(1p)
表 8-17: 組み込み Korn または POSIX シェル・コマンド
コマンド | 説明 |
|
別名定義を代入して表示する。
|
|
ディレクトリの変更を可能にする。
ディレクトリを指定しなければ,
|
|
標準出力に引数を書き込む。 |
|
指定された変数を,その後に実行されるコマンドの環境に自動的にエクスポートするためにマークする。
|
|
コマンド・ヒストリ・バッファの内容を表示,編集,および再実行できる。
|
|
コマンド・ヒストリ・バッファの内容を表示する。
|
|
現在のバックグラウンド・プロセスのジョブ番号と PID 番号を表示する。
|
|
現在のディレクトリを表示する。
|
|
変数値を代入して表示する。
|
|
シェルから実行されたプロセスの累積ユーザおよびシステム時間を表示する。 |
|
シェルが指定信号を受け取ると,指定コマンドを実行する。
|
|
新しく作成されたすべてのファイルに対し,作成するプログラムによって設定される省略時の許可から,差し引く許可を指定する。
|
|
別名定義を削除する。 |
|
変数に代入されていた値を削除する。
|