この章では,オペレーティング・システムのシェルについて紹介します。 この章では次のような項目について説明しています。
C シェルおよび Bourne,Korn,および POSIX シェルの目的と一般機能の理解 (7.1 節)
シェルの変更 (7.3 節)
すべてのシェルに共通なコマンド入力エイドの使用 (7.4 節)
シェル環境,ログイン・スクリプト,環境変数,およびシェル変数の理解 (7.5 節)
環境変数とシェル変数の設定とクリア (7.7 節)
シェルがシステム上でコマンドを見つける方法の理解 (7.8 節)
ログアウト・スクリプトの作成 (7.9 節)
基本的なシェル・プロシージャの作成と実行 (7.10.1 項)
この章では,オペレーティング・システムのすべてのシェルに共通な機能を取り上げるとともに,シェル間の相違についてもある程度説明します。
C シェルおよび Bourne,Korn,または POSIX シェルの特殊機能についての詳細は,第 8 章を参照してください。
7.1 シェルの目的
オペレーティング・システムへのユーザ・インタフェースはシェルと呼ばれます。 シェルは,ユーザが入力するコマンドを解釈し,要求されたプログラムを実行して,その結果を画面に表示します。
Tru64 UNIX オペレーティング・システムには次のようなシェルがあります。
Bourne シェル (システムの省略時のシェル)
C シェル
Korn シェル
POSIX シェル
システムに設定されているセキュリティ制限や,Korn シェル のライセンス制限に合致すれば,いずれのシェルにもアクセスできます。 すべてのシェルは同じような基本的な機能を実行します。 ユーザが実行したコマンドは,シェルを介してシステムに伝えられます。
コマンドを解釈するだけでなく,シェルはプログラミング言語としても使用できます。 ユーザはコマンドを含むシェル・プロシージャを作成することができ,このシェル・プロシージャは,プログラムと同じようにコマンド行上でシェル・プロンプトに対して実行できます。
シェル・プロシージャを実行するとき,ユーザの現在のシェルはサブシェルを作成 (spawn) します。
サブシェルとは,現在のシェルがプログラムを実行するために新しく作成するシェルのことです。
このため,シェル・プロシージャが実行するコマンド (たとえば
cd
) は,シェル・プロシージャを起動したシェルには影響を及ぼしません。
シェル・プロシージャを使用すると,長すぎるコマンドや大きく複雑なコマンド・シーケンス,および決まりきった反復的な作業を行うのが簡単になります。
シェル・プログラミングについての詳細は,7.10 節を参照してください。
7.2 C シェル,Bourne シェル,Korn シェル,および POSIX シェルの機能の要約
オペレーティング・システムには,コマンド実行とプログラミングを可能にするという 2 つの機能を兼ね備えた次のようなシェルがあります。
Bourne シェル (sh
)
これはプログラミングで手軽に使用できる単純なシェルです。 通常ドル記号 ($) プロンプトが表示されます。 このシェルは,C シェルや Korn および POSIX シェルのような対話機能や複雑なプログラミング構造 (配列や整数算術演算) を備えていません。
Bourne シェルには制限付きシェル (Rsh
) もあります。
詳しくは,7.2.2 項を参照してください。
C シェル (csh
)
このシェルは対話用に設計されています。 通常パーセント記号 (%) がシステム・プロンプトとして表示されます。 C シェルは,対話式にコマンドを入力する次のような機能を備えています。
コマンド・ヒストリ・バッファ
コマンド別名
ファイル名補完
コマンド行編集
これらの機能についての詳細は,7.2.1 項を参照してください。
Korn シェル (ksh
)
このシェルは,C シェルの使いやすさと Bourne シェルのプログラミングしやすさを組み合わせたものです。 システム・プロンプトは通常ドル記号 ($) です。 Korn シェルは次のような機能を備えています。
C シェルの対話機能
Bourne シェルの単純なプログラミング構文
コマンド行編集機能
最速実行時間
Bourne シェルとの上位互換性
Bourne シェルプログラムのほとんどは Korn シェルで実行できます。
これらの機能について詳細は,7.2.1 項を参照してください。
POSIX シェル (sh
)
このシェルは,IEEE POSIX 規格に準拠しています。
Korn シェルによく似ているので,本書では,Korn シェルと POSIX シェルをまとめて説明します。
この規格についての情報は,
sh
(1p)standards
(5)
POSIX シェルは Korn シェルのもう 1 つの指名子です。
7.2.1 C シェルおよび Korn シェルまたは POSIX シェルの機能に関する詳細情報
C シェルおよび Korn または POSIX シェルは,次のような対話機能を備えています。
コマンド・ヒストリ
コマンド・ヒストリ・バッファは入力されるコマンドを格納てし,ユーザがいつでもそれを表示できるようにします。
このため,以前に入力したコマンド,または以前に入力したコマンドの一部を選択して,それを再度実行することができます。
この機能を使用すると,長いコマンドを改めて入力し直さなくても,再度使用できるため,時間が節約できます。
C シェルでこの機能を利用するには,.cshrc
ファイルにいくつかの設定を行わなければなりませんが,Korn および POSIX シェルでは,この機能は自動的に提供されます。
コマンド別名
コマンド別名機能を使用すると,長いコマンド行を短縮したり,コマンドの名前を変更したりすることができます。
これは,頻繁に使用する長いコマンド行の別名を定義することによって行います。
たとえば,ディレクトリ
/usr/chang/reports/status
に何回も移動する必要があるとします。
その場合は,たとえば別名
status
を作成して,コマンド行に
status
と入力するだけで,いつでもそのディレクトリに移動できるようにします。
さらに,別名機能を使用すれば,オペレーティング・システムのコマンドに対して,もっと説明的な名前を作成することもできます。
たとえば,mv
コマンドに対して
rename
という別名を定義することもできます。
ファイル名補完
C シェルでは,ファイル名補完機能とは,ファイル名の一部を入力すると,シェルがユーザに代わってそれを補完してくれる機能で,入力の手間を省いてくれるものです。 Escape キーを押すと,シェルがユーザに代わってファイル名を補完します。 C シェルのファイル名補完機能についての詳細は,8.2.4 項を参照してください。
Korn または POSIX シェルでは,シェルに要求して,入力した部分名に一致するファイル名のリストを表示させることができます。 その後,表示されたファイルのなかからファイルを選択することができます。 Korn または POSIX シェルのファイル名補完機能についての詳細は,8.4.5 項を参照してください。
Korn および POSIX シェルはインライン編集機能を備えています。
この機能により,以前に入力したコマンドを検索して,それを編集することができます。
この機能を使用するには,vi
や
emacs
のようなテキスト・エディタの使用方法を知っておく必要があります。
これらのシェル機能の詳細については,第 8 章を参照してください。
7.2.2 制限付き Bourne シェル
オペレーティング・システムでは,指定ユーザに対し,制限付き Bourne シェル (Rsh
) で限定された機能を提供することによって,システム・セキュリティを拡張します。
これらの指定ユーザがシステムにログインするときには,制限付き Bourne シェルだけにアクセスする権利が与えられます。
だれが制限付き Bourne シェルにアクセスできるかは,システム管理者が決定します。
制限付きシェルは,より制御されたシェル環境を要求するインストレーションにとって有効です。
このため,システム管理者は,特権と機能が制限されたユーザ環境を作成することができます。
たとえば,システムのゲストであるユーザは全員,ユーザ名
guest
の下でしかアクセスできないとします。
システムにログインすると,ユーザ
guest
は制限付きシェルを割り当てられます。
Rsh
の動作は,次の点を除いて
sh
の動作と同じです。
ディレクトリの変更
cd
コマンドは起動できません。
/ を含むパス名またはコマンド名の指定
PATH 変数 または SHELL 変数の値の設定
これらの変数に関する詳細は,7.5.2 項を参照してください。
> および >> を使用した出力のリダイレクション
Rsh
に関する詳細は,
sh
(1b)7.3 シェルの変更
ユーザがシステムにログインすると,システム管理者が指定したシェルに自動的に入ります。 ただし,システム上に設定されているセキュリティ機能によっては,次のことを行うコマンドが入力できます。
実行しているシェルの確認
シェルの一時的変更
シェルの永久的変更
以降の各項で,これらの操作について説明します。
7.3.1 実行しているシェルの確認
現在どのシェルを実行しているかを確認するときは,次のコマンドを入力します。
echo $SHELL
実行しているシェルのファイル名が表示されます。
Bourne シェル (sh
) を実行している場合は,次のような結果が出力されます。
$ echo $SHELL /usr/bin/sh $
表 7-1 は,表示される各シェルのファイル名,および root 以外のユーザに対する省略時のシステム・プロンプトを示したものです。 システムにより,システム・プロンプトは異なる場合があります。
シェル | シェル名 | 省略時のプロンプト |
Bourne | sh |
$ |
制限付き Bourne | Rsh |
$ |
C | csh |
% |
Korn | ksh |
$ |
POSIX | sh |
$ |
システムのセキュリティ機能で許されている場合は,他のシェルを使用することができます。
シェルを一時的に変更するときは,次のコマンドを入力します。
shellname
shellname は使用するシェルのファイル名です。 コマンド行に入力する有効なシェルのファイル名については,表 7-1 を参照してください。 シェルが呼び出されると,正しいシェル・プロンプトが表示されます。
新しいシェルでの作業が終了したら,exit
を入力するか Ctrl/D を押すことによって,省略時のシェルに戻ることができます。
たとえば,Korn シェルが省略時のシェルの場合に,C シェルに移り,その後 Korn シェルに戻るには,次のコマンドを入力します。
$ /usr/bin/csh % exit $
注意
制限付き Bourne シェルを使用している場合は,別のシェルに移ることはできません。
システムのセキュリティ機能で許されている場合は,省略時のシェルを永久的に変更することができます。
現在のシェルがC シェルである場合,省略時のシェルを変更するには
chsh
コマンドを使用します。
C シェルを使用していない場合には,システム管理者に問い合わせて,省略時のシェルを変更してください。
C シェルでは,省略時のシェルを変更するには,次のコマンドを入力します。
% chsh Changing login shell for user. Old shell: /usr/bin/csh New shell:
新しいシェルの名前を入力してください。 コマンド行に入力する有効なシェル名については,表 7-1 を参照してください。
なお,chsh
コマンドを入力した後,その変更を有効にするために,ログアウトしてから改めてログインしなければなりません。
7.4 コマンド入力支援機能
オペレーティング・システムのすべてのシェルには,ユーザの作業を支援する次のような機能があります。
複数コマンドおよびコマンド・リストを入力する機能
パイプとフィルタ
コマンドをグループ化する機能
引用
以降の各項で,これらの機能について説明します。
7.4.1 複数コマンドとコマンド・リストの使用
通常,シェルはコマンド行の最初のワードをコマンド名として解釈し,他のワードはすべてそのコマンドの引数として解釈します。 シェルは普通,各コマンド行を単一のコマンドと考えます。 ただし,表 7-2 に示す演算子を使用すれば,単一のコマンド行で複数のコマンドを実行することができます。
演算子 | 動作 | 例 |
; | コマンドを順次実行させる。 | cmd1 ; cmd2 |
&& | 現在のコマンドが成功した場合に,次のコマンドを実行する。 | cmd1 && cmd2 |
|| | 現在のコマンドが失敗した場合に,次のコマンドを実行する。 | cmd1 || cmd2 |
| | パイプラインを作成する。 | cmd1 | cmd2 |
以降の項で,コマンドの順次実行 (;),条件付きのコマンド実行 (||と&&),およびパイプラインの使用 (|) について説明します。
7.4.1.1 セミコロン (;) を使用したコマンドの順次実行
コマンドをセミコロン (;) で区切ると,1 行に複数のコマンドを入力することができます。
次の例では,シェルは
ls
を実行して,それが終了するのを待ちます。
ls
が終了すると,シェルは
who
を実行し,以下同様にして最後のコマンドまで実行します。
$ ls ; who ; date ; pwd change file3 newfile amy console/1 Jun 4 14:41 Tue Jun 4 14:42:51 CDT 1999 /u/amy $
なお,コマンドのどれかが失敗しても,その他のコマンドは順次実行されます。
コマンド行を読みやすくするために,ブランクまたはタブを使用してコマンドとセミコロン (;) を分離します。
この場合には,シェルはこのようなブランクやタブを無視します。
7.4.1.2 条件付きのコマンド実行
コマンドを 2 つのアンパサンド (&&
) または縦線 (||
) 演算子で接続すると,シェルは最初のコマンドを実行し,それから次の条件で残りのコマンドを実行します。
&&
シェルは,現在のコマンドが完了した場合に限って,次のコマンドを実行します。 コマンドがゼロの値を返すと,正常に完了したことを意味します。
||
シェルは,現在のコマンドが完了しない場合に限って,次のコマンドを実行します。
アンパサンド (&&
) 演算子の構文は次のとおりです。
cmd1
&&
cmd2
&&
cmd3
&&
cmd4
&&
cmd5
cmd1 が成功すれば,シェルは cmd2 を実行します。 cmd2 が成功すれば,cmd3 を実行し,以下同様に,コマンドが失敗するか最後のコマンドが終了するまで続きます。 コマンドのどれかが失敗すれば,シェルはコマンド行の実行を停止します。
2 本の縦線 (||) 演算子の構文は次のとおりです。
cmd1
||
cmd2
cmd1 が失敗すれば,シェルは cmd2 を実行します。 cmd1 が成功すれば,シェルはコマンド行の実行を停止します。
たとえば,コマンド
mysort
はソート・プログラムであり,ソート処理中に一時ファイル (mysort.tmp
) を作成するとします。
ソート・プログラムが正常に終了すれば,一時ファイルを削除して,クリーンアップ処理を行います。
一方,プログラムが失敗した場合は,一時ファイルが削除されないことがあります。
確実に
mysort.tmp
の削除を行うには,次のコマンド行を入力してください。
$ mysort || rm mysort.tmp $
最初のコマンドが失敗した場合に限り,2 番目のコマンドが実行されます。
7.4.2 パイプとフィルタの使用
パイプとは,2 つの関連するコマンド間の一方向接続です。 あるコマンドがその出力をパイプに書き込み,もう一方のプロセスがその入力をパイプから読み取ります。 2 つ以上のコマンドがパイプ (|) 演算子によって接続されると,パイプラインを形成します。
図 7-1
は,パイプラインを通る入力と出力の流れを示しています。
最初のコマンド (cmd1) の出力は 2 番目のコマンド (cmd2) の入力となり,2 番目のコマンドの出力は 3 番目のコマンド (cmd3) の入力になります。
図 7-1: パイプラインを通る流れ
フィルタとは,標準入力を読み取り,その入力を変換し,変換済みの入力を標準出力に書き込むコマンドです。
フィルタの典型的な使用例として,パイプライン中の中間コマンドとしてパイプ (|) 演算子で接続して使用する方法があります。
たとえば,ls
コマンドを使用して,現在のディレクトリから階層の最下位までの全ディレクトリの内容を再帰的にリストし,その結果を表示するには,次のコマンドを入力します。
$ ls -R | pg
この例では,pg
コマンドがフィルタです。
これは,pg
コマンドが
ls -R
コマンドからの出力を変換して,一度に 1 画面ずつ表示するからです。
フィルタでないコマンドのなかにも,そのコマンドにフィルタと同じような機能を行わせるフラグを持つものがあります。
たとえば,diff
(ファイル比較) コマンドは,通常 2 つのファイルを比較し,その違いを標準出力に書き込みます。
diff
の普通の形式は次のとおりです。
diff
file1 file2
しかし,どちらかのファイル名の代わりにダッシュ (--) フラグを使用すると,diff
は標準入力を読み取って,それを指定されたファイルと比較します。
次のパイプラインでは,ls
は現在のディレクトリの内容を標準出力に書き込みます。
diff
コマンドは
ls
の出力を
dirfile
というファイルの内容と比較して,相違箇所を一度に 1 ページずつ (pg
コマンドで) 標準出力に書き込みます。
$ ls | diff - dirfile | pg
次の例では,別の種類のフィルタ・プログラム (grep
) を使用しています。
$ ls -l | grep r-x | wc -l 12 $
この例では,次のことが行われます。
ls -l
コマンドは現在のディレクトリの内容を詳細な形式でリストする。
ls -l
の出力が
grep r-x
の標準入力となる。
grep r-x
はフィルタであり,標準入力中のファイルを検索して,許可が
r-x
のパターンを探し,そのパターンを含むすべての行を標準出力に書き込みます。
grep r-x
の標準出力は
wc -l
の標準入力となる。
wc -l
は,標準入力中にある
grep
の基準に合致するファイル数を表示します。
パイプラインを使用しないで同じ結果を得るには,次のようにします。
ls -l /user
の出力をファイルに送る。
たとえば,次のように入力します。
$ ls -l > file1
file1
を
grep r-x
の入力として使用し,grep
の出力を別のファイルにリダイレクトする。
たとえば,次のように入力します。
$ grep r-x file1 > file2
grep
の出力ファイルを
wc -l
の入力として使用する。
たとえば,次のように入力します。
$ wc -l file2
上記の手順から明らかなように,同じオペレーションでも,パイプラインを使用すると,はるかに容易に行うことができます。
パイプライン中の各コマンドは,別個のプロセスとして実行されます。
パイプラインは一方向 (左から右) にのみ作用し,また,パイプライン中の全プロセスは同時に実行できます。
読み取るべき入力がないとき,または次のプロセスへのパイプが一杯になっているとき,プロセスは一時停止します。
7.4.3 コマンドのグループ化
シェルには複数のコマンドをグループ化する方法が 2 通りあります。 表 7-3 を参照してください。
記号 | 動作 |
(commands) | シェルはサブシェルを作成して,グループ化された
commands
を別個のプロセスとして実行する。 |
{commands} | シェルはグループ化された
commands
をユニットとして実行する。
中カッコ ({ }) は Bourne,Korn,および POSIX シェルだけで使用できる。 |
以降の項で,表 7-3
に示すコマンドをグループ化する記号について詳細に説明します。
7.4.3.1 カッコ ( ) の使用
次のコマンドのグループ化では,シェルはカッコで囲まれたコマンドを別個のプロセスとして実行します。
$ (cd reports;ls);ls
シェルはサブシェル (別個のシェル・プログラム) を作成して,ディレクトリ
reports
に移動し,そのディレクトリ内のファイルをリストします。
サブシェル・プロセスが完了すると,シェルは現在のディレクトリ内のファイルをリストします (ls
)。
このコマンドを ( ) を指定しないで入力した場合には,元のシェルがディレクトリ
reports
に移動して,そのディレクトリ内のファイルをリストした後,そのディレクトリ内のファイルをもう一度リストします。
cd reports;ls
コマンドのためのサブシェルも,別個のプロセスも作成されません。
シェルは,カッコ ( ) がコマンド行のどこにあっても認識します。
カッコを本来の意味で (すなわち,コマンドのグループ化を行わずに) 使用するときは,左カッコまたは右カッコの直前にバックスラッシュ (\) を付加して,カッコを引用してください。
たとえば,\(
のように指定します。
シェルにおける引用の詳細については,7.4.4 項を参照してください。
7.4.3.2 中カッコ { } の使用
中カッコ { } の使用は Bourne,Korn,および POSIX シェルのみで有効です。
複数のコマンドを中カッコ { } で囲んでグループ化すると,シェルはサブシェルを作成せずにそれらのコマンドを実行します。
次の例では,シェルは
date
コマンドを実行し,その出力を
today.grp
ファイルに書き込んだ後,who
コマンドを実行して,その出力を
today.grp
に書き込みます。
$ { date; who ;} > today.grp $
コマンドが中カッコで囲まれていない場合,シェルは
date
コマンドの出力をディスプレイに表示し,who
コマンドの出力をファイルに書き込みます。
シェルはパイプラインとコマンド・リスト中の中カッコ { } を認識しますが,左中カッコがコマンド行の先頭文字である場合に限ります。
7.4.4 引用
シェルにとって特殊な意味を持つ左山カッコ (<),右山カッコ (>),パイプ (|),アンパサンド (&),アスタリスク (*),疑問符 (?) などの文字を予約文字といいます。 オペレーティング・システムの各シェルの予約文字については,第 8 章を参照してください。
予約文字を本来の意味で (すなわち,特殊な意味なしに) 使用するには,表 7-4 に示すように,3 種類のシェル引用規約のいずれかを使用して,その文字を引用します。
引用規約 | 動作 |
\ | バックスラッシュ --- 単一の文字を引用する。 |
' ' | 一重引用符 --- 文字列を引用する (一重引用符自体を除く)。 |
" " | 二重引用符--- 文字列を引用する ($ ,` ,および
\ を除く)。 |
以降の項では,表 7-4
に示す引用規約について詳細に説明します。
7.4.4.1 バックスラッシュの使用 ( \ )
単一の文字を引用するときは,次のようにその文字の直前にバックスラッシュ ( \ ) をタイプします。
$ echo \? ? $
このコマンドは単一の疑問符 (?) を表示します。
7.4.4.2 一重引用符の使用 (' ')
文字列を一重引用符で囲むと,シェルはその文字列内のすべての文字 ('
自体を除く) を本来の意味に解釈します。
一重引用符は次の場合に役立ちます。
ドル記号 ($
),抑音符 (
`
),バックスラッシュ ( \
) などの予約文字をシェルに解釈させたくないとき
シェルに変数名を解釈させたくないとき
次の例は,変数名をシェルに解釈させずに表示したい場合に,一重引用符を使用する方法を示しています。
$ echo 'The value of $USER is' $USER The value of $USER is amy $
echo
コマンドは,変数名
$USER
が一重引用符内にある場合には,その変数名をそのまま表示しますが,$USER
が一重引用符の外にある場合には,その値を解釈します。
変数代入については,7.7.1 項を参照してください。
7.4.4.3 二重引用符の使用 (" ")
二重引用符 (" "
) は特殊な引用形式を提供します。
二重引用符内では,予約文字のドル記号 ($
),抑音符 (
`
),およびバックスラッシュ ( \
) は,それぞれの特殊な意味を持ちます。
シェルは,二重引用符内のその他のすべての文字は本来の意味に解釈されます。
二重引用符は変数代入において最も頻繁に使用されます。
次の例は,シェル変数の値を含むメッセージにおいて,山カッコ (通常は予約文字) をそのまま表示したい場合に,二重引用符を使用する方法を示しています。
echo "<<Current shell is $SHELL>>" <<Current shell is /usr/bin/csh>> $
変数代入については,7.7.1 項を参照してください。
7.5 シェル環境
ログインするといつも,省略時のシェルがユーザ固有の作業環境を定義して維持します。 ユーザの環境は,ユーザ識別やシステムのどこで作業しているか,またどんなコマンドを実行しているかなどの特性を定義します。
作業環境は環境変数とシェル変数の両方で定義されます。 省略時のログイン・シェルは環境変数を使用し,それらをユーザが作成するすべてのプロセスやサブシェルに渡します。 シェル変数は現在のシェルだけで有効で,サブシェルには渡されません。
以降の項で,シェル環境,シェル環境の構成方法,およびシェル環境の調整方法について説明します。
7.5.1 ログイン・プログラム
ログインすると必ず,login
プログラムが実行されます。
このプログラムは
/etc/passwd
ファイルに格納されているデータを使用して,実際にログイン・セッションを開始します。
/etc/passwd
ファイルには各システム・ユーザについて記述した 1 行の情報が含まれています。
この行には,ユーザ名,パスワード (暗号化された形式),ホーム・ディレクトリ,および省略時のシェルが記述されています。
/etc/passwd
ファイルについて詳細は,第 5 章を参照してください。
login
プログラムは,login:
プロンプトに対してユーザ名を入力した後,実行されます。
このプログラムにより次の機能が行われます。
Password:
プロンプトを表示する (パスワードがある場合)。
ユーザが入力したユーザ名とパスワードを,/etc/passwd
ファイルに格納されているデータと照合して確認する。
シェル・プロセスの実行を開始する。
システム・ログイン・スクリプトおよびユーザ作成のログイン・スクリプトを実行する。
詳細は7.6 節を参照してください。
シェル環境は,ユーザ固有の作業環境を定義して維持します。 ユーザの作業環境の特性の大部分は環境変数によって定義されます。
環境変数は名前と値から構成されます。 たとえば,ユーザのログイン・ディレクトリ用の環境変数は HOME という名前であり,その値はログインするときに自動的に定義されます。
環境変数のなかには
login
プログラムによって設定されるものもありますが,ユーザのシェルに合わせてログイン・スクリプトで定義できるものもあります。
たとえば,C シェルを使用している場合,環境変数は
.cshrc
ログイン・スクリプトで設定するのが普通です。
ログイン・スクリプトについての詳細は,7.6 節を参照してください。
表 7-5 に,オペレーティング・システムのすべてのシェルで使用できる主な環境変数の一覧を示します。 これらの変数の値の大部分はログイン・プロセスで設定され,その後,セッション中に作成される各プロセスに渡されます。
環境変数 | 説明 |
HOME |
ログイン・ディレクトリ,つまりログインが完了すると現在のディレクトリになるディレクトリの名前を指定する。
cd
コマンドは省略値として
HOME
の値を使用する。
この値は
login
プログラムで設定され,個々のユーザが変更することはできない。 |
LOGNAME |
ユーザのログイン名を指定する。 |
MAIL |
メール・システムが新たなメールの到着を検出するために使用するファイルのパス名を指定する。
login
プログラムがユーザ名に基づいてこの変数を設定する。 |
PATH |
システムがコマンドの探索,発見,実行に使用するディレクトリとディレクトリ順を指定する。 この変数はユーザのログイン・スクリプトで設定される。 |
SHELL |
省略時のシェルを指定する。
この変数は,login
プログラムにより,/etc/passwd
ファイルのエントリに指定されたシェルを使用して設定される。 |
TERM |
使用している端末のタイプを指定する。 この変数は通常,ユーザのログイン・スクリプトで設定される。 |
TZ |
現在の時間帯とグリニッジ平均時との差を指定する。 この変数はシステム・ログイン・スクリプトで設定される。 |
LANG |
システムのロケールを指定する。
ロケールは言語,テリトリ,および文字コード・セットの 3 つの部分から構成される。
省略値は C ロケールであり,これは言語が英語,テリトリが米国,コード・セットが ASCII である。
LANG
はログイン・スクリプトで設定できる。 |
LC_COLLATE |
名前をソートするときとパターンに文字範囲が指定されたときに使用する照合順序を指定する。
省略値は ASCII 照合順序。LC_COLLATE
はログイン・スクリプトで設定できる。 |
LC_CTYPE |
ctype 関数で使用される現在のロケールの文字分類規則を指定する。
省略値は ASCII 文字の分類。LC_TYPE
変数はログイン・スクリプトで設定できる。 |
LC_MESSAGES |
yes/no プロンプトに使用する言語を指定する。 省略値はアメリカ英語であるが,システムによって別の言語を指定することもできる。 |
LC_MONETARY |
システムの通貨表記形式を指定する。
省略値はアメリカの通貨表記形式。
LC_MONETARY
変数はログイン・スクリプトで設定できる。 |
LC_NUMERIC |
システムの数値形式を指定する。
省略値はアメリカの数値形式。
LC_NUMERIC
変数はログイン・スクリプトで設定できる。 |
LC_TIME |
システムの日時形式を指定する。
省略値はアメリカの日時形式。
LC_TIME
変数はログイン・スクリプトで設定できる。 |
これらの環境変数の多くは,ログイン・プロセス中に,該当するログイン・スクリプトによって設定できます (7.6 節 を参照)。 ただし,これらの値は再設定することができます。 また,省略値が定められていない変数についても設定することができます。 詳しくは7.7.1 項を参照してください。
LANG
,LC_COLLATE
,LC_CTYPE
,LC_MESSAGES
,LC_MONETARY
,
LC_NUMERIC
,LC_TIME
の各変数についての詳細は,付録 C
を参照してください。
この付録では,言語および各国の習慣をサポートする他のシステム機能のコンテキストにおける変数について説明しています。
ユーザ自身の環境変数を作成することもできます。
たとえば,システムによってはユーザが複数のメール・プログラムを利用できるものもあります。
たとえば,システムで
mail
と
mh
のメール・プログラムが利用でき,それぞれに固有のパス名があるとします。
その場合,各メール・プログラムのパス名について変数を定義することができます。
オペレーティング・システムの各シェルに特有な環境変数についての詳細は,第 8 章を参照してください。
オペレーティング・システムでサポートするシェル環境変数の一覧については,
sh
(1b)sh
(1p)csh
(1)ksh
(1)7.5.3 シェル変数
シェル変数は現在のシェルに対してのみ有効であり,サブシェルには渡されません。 したがって,シェル変数はそれらが定義されているシェルでしか使用できません。 言い換えれば,シェル変数はローカル変数と考えることができます。
シェル変数は,環境変数にすることにより,現在のシェルの外部からアクセスできるようになります。 環境変数についての詳細は,7.7.1 項を参照してください。
また,ユーザ自身のシェル変数を作成することもできます。
たとえば,メール・プログラムのなかには,PAGER
変数を使用して,メールを表示するプログラムを定義するものがあります。
メール・プログラムが
mailx
だとすると,PAGER
変数を定義して,メールの表示に
more
プログラムを使用するようにできます。
シェル変数の設定方法については,7.7.1 項を参照してください。
7.6 ログイン・スクリプトとユーザ環境
ログイン・スクリプトとは,ユーザ環境をセットアップするための一連のコマンドが記述されているファイルです。 ログイン・スクリプトには次の 2 種類があります。
特定のシェルのすべてのユーザのためのシステム・ログイン・スクリプト
このスクリプトはすべてのユーザの省略時の環境を作成するものであり,システム管理者によって保守されます。
Bourne,Korn,および POSIX シェルでは,/etc/profile
というシステム・ログイン・スクリプトを使用します。
C シェルでは
/etc/csh.login
というスクリプトを使用します。
システム・ログイン・スクリプトのパス名については,表 7-6
を参照してください。
ログインすると,このファイルのコマンドがまず実行されます。
省略時のログイン・ディレクトリ内のローカル・ログイン・スクリプト
このスクリプトを使用すると,ユーザ環境を調整でき,該当するファイルはユーザが保守します。
たとえば,省略時の探索パスやシェル・プロンプトを変更することができます。
ユーザの省略時のシェルが Bourne,Korn,または POSIX シェルの場合 (7.3 節を参照) のログイン・スクリプトは
.profile
,C シェルの場合のログイン・スクリプトは
.login
です。
ローカル・ログイン・スクリプトは,システム・ログイン・スクリプトの後に実行されます。
省略時のシェルが C シェルの場合
.cshrc
ファイルを使用して環境を調整することもできます。
.cshrc
はログイン時 (.login
の後) およびサブシェルの作成 (spawn) 時に実行されます。
.cshrc
ファイルを使用すると変数がサブシェルで自動的に有効になります。
Korn および POSIX シェルでは起動時に,ENV
環境変数によって設定されているファイルを実行します。
この変数は通常
.profile
ファイルで設定され,一般には
$HOME
ディレクトリにある別のファイル
.kshrc
または
.envfile
等に対して設定されます。
このような設定を行う場合には
.profile
ファイルに次のような記述を追加します。
ENV=~/.kshrc
このファイルには通常は,シェル変数,別名定義,関数定義などを記述します。
本書では,このファイルを
.kshrc
とよびます。
システム・ログイン・スクリプトで基本的な環境は設定されるので,ユーザ自身のログイン・スクリプトは必ず作成しなくてはならないわけではありません。 システム管理者がローカル・ログイン・スクリプトを作成している場合があるので,各ユーザはこれをエディタで編集して使用することができます。
システムに不慣れな場合は,すでに設定されている省略時の環境を使用したいと思うかもしれません。 しかし,システムに慣れるにしたがい,自分のログイン・スクリプトを作成したり修正したいと思うようになるでしょう。
表 7-6
に,Tru64 UNIX オペレーティング・システムの各シェルのシステム・ログイン・スクリプトとローカル・ログイン・スクリプトを示します。
システムにログインするとシェルに応じて,すべてのスクリプトが実行されます。
さらに,任意のシェル・プロンプトに対して
csh
と入力すると,.cshrc
ファイルが実行され,C シェルのサブシェルが作成されます。
シェル | パス名 | システム・ログイン・スクリプト | ローカル・ログイン・スクリプト |
Bourne | /usr/bin/sh |
/etc/profile |
.profile |
Korn | /usr/bin/ksh |
/etc/profile |
.profile ENV |
POSIX | /usr/bin/posix/sh |
/etc/profile |
.profile ENV |
C | /usr/bin/csh |
/etc/csh.login |
.login .cshrc |
ホーム・ディレクトリにローカル・ログイン・スクリプトがあるかどうかを確認するためには,ls -a
コマンドを使用します。
このコマンドは,ドット (.) で始まるすべてのファイルを,他のエントリと一緒に表示します。
次のカスタマイズ機能は,一般にログイン・スクリプトで設定されています。
端末特性
探索パスとその他の環境変数
シェル変数
umask
による新しいファイルに対する最大許可 (第 5 章を参照)
ワークステーションへのメッセージの許可または停止
trap
コマンド (Bourne,Korn,および POSIX シェルのみ)
コマンド別名,ヒストリ変数(C シェルと Korn または POSIX シェルのみ)
システム状態情報とその他のメッセージの表示
メールの有無のチェック
ニュースの有無のチェック
システム・ログイン・スクリプトの内容をチェックして,ローカル・ログイン・スクリプトで重複しないようにするとよいでしょう。 たとえば,システム・ログイン・スクリプトでニュースの有無をチェックしていれば,ローカル・ログイン・スクリプトで同じことをする必要はありません。
ログイン・スクリプトの個々の例については,第 8 章を参照してください。
7.7 変数の使用
Tru64 UNIX オペレーティング・システムのすべてのシェルは,環境変数とシェル変数を使用して,ユーザ環境の特性を定義します。 システム管理者は,セット・アップ処理の一環として,適切なログイン・スクリプトで省略時の環境変数およびシェル変数の値を設定しています。
大部分のユーザにとっては,省略時の環境変数およびシェル変数の値で十分です。 しかし,システムに慣れるにしたがい,一部の変数の値を修正したいと思うようになるかもしれません。 たとえば,シェル・プロンプトを定義する変数を再設定して,もっと自分独自のものにしたいと思うかもしれません。 また,非常に長いディレクトリ・パス名を指定するシェル変数を設定して,そのディレクトリを使用するコマンドをタイプする時間を節約できるようにしたいと思うかもしれません (7.7.1 項に示す例を参照)。 あるいは,シェル・プロシージャを作成するとき,変数を設定したほうが便利だと思うかもしれません。 このように変数を創造的に使用すれば,作業環境が改善できることがわかるでしょう。
環境変数のなかには再設定できるものもあれば,読み取り専用で再設定できないものもあります。
つまり,これらの変数は使用はできますが,修正はできません。
詳しくは,該当するシェルのリファレンス・ページ,
sh
(1b)sh
(1p)csh
(1)ksh
(1)
環境変数を再設定したり,ユーザ自身のシェル変数を定義するには,次のいずれかを行います。
ログインするときにいつもその値が設定されているようにするには,該当するローカル・ログイン・スクリプトを編集します。 詳しくは,7.6 節を参照してください。
現在のログイン・セッションのためにだけその値を設定したい場合は,コマンド行で環境変数を設定します。
ユーザはいつでも,任意の変数の値を参照したり表示することができます。
また,どの変数の値もクリアすることができます。
7.7.1 変数の設定
以降の各項で,変数値の設定,参照,表示,クリアの方法について説明します。
7.7.1.1 Bourne シェル,Korn シェル,および POSIX シェルのシェル変数
Bourne,Korn,および POSIX シェルでは,変数は代入文で設定します。 変数設定のための一般形式は次のとおりです。
name
=
value
name には変数名を指定します。 value には,変数に代入する値を指定します。 コマンド行にはスペースを入れないようにしてください。
シェル変数をサブシェルで使用できるようにするには,次のように export コマンドを入力します。
export
name
シェル変数をエクスポートすると環境変数になります。
Bourne シェルの場合は,2 つのステートメントが必要になります。 Korn および POSIX シェルでは,2 つのステートメントを次のように結合することができます。
export
name
=
value
たとえば,place
という変数を,U.
S.
A.
という値を代入することによって作成できます。
その場合には,次の文を使用します。
$ place='U. S. A.' $
これ以後は,変数 place は,その値を使用するのとまったく同様に使用することができます。
もっといい例として,Bourne シェルを使用していて,シェル・プロンプトを一時的に自分独自のものにしたいとします。
省略時の Bourne シェル・プロンプトは,PS1
環境変数によって設定されるドル記号 ($) です。
それを
What Shall I Do Next? >
に設定するには,次のコマンドを入力します。
$ PS1='What Shall I Do Next? >' What Shall I Do Next? >
このシェル・プロンプトをサブシェルでも利用できるようにするには,次のコマンドを入力します。
$ export PS1
この
What Shall I Do Next? >
というプロンプトはセッションを通して有効です。
この新しいプロンプトを永続的なものにしたい場合は,.profile
ファイルに同じ代入文と
export
コマンドを入力してください。
もう 1 つ例を挙げると,タイプする時間を節約するため,何度も使用する長いパス名の変数を定義したいとします。
ディレクトリ
/usr/sales/shoes/women/retail/reports
を表わす変数
reports
を定義するには,次のように入力します。
$ reports=/usr/sales/shoes/women/retail/reports
変数を設定したのちに参照するには,変数名の前に$を入力します。 変数参照についての詳細は,7.7.2 項を参照してください。
このセッション中に入力する任意のコマンドで変数
reports
を使用できます。
このプロンプトを永続的なものにする場合は,.profile
ファイルに同じ代入文を入力してください。
7.7.1.2 C シェルの変数
C シェルでは,環境変数は
setenv
コマンドを使用して設定します。
setenv
コマンドの一般形式は次のとおりです。
setenv
name value
name には変数名を指定します。 value には,変数に代入する値を指定します。
PATH 環境変数を設定する例として,7.8 節を参照してください。
シェル変数は
set
コマンドで設定します。
set
コマンドの一般形式は次のとおりです。
set
name
=
value
name には変数名を指定します。 value には,変数に代入する値を指定します。 value にスペースを含む場合には,式全体を一重引用符 (') で囲んでください。
たとえば,プロンプトを変更したいとします。
省略時の C シェル・プロンプトは % です。
それを
Ready? >
に変えたいときは,コマンド行に次のように入力します。
% set prompt='Ready? >' Ready? >
Ready? >
プロンプトはセッションを通して有効です。
Ready? >
プロンプトから別のシェルを実行すると,その新しいシェルのプロンプトが表示されます。
この新しいプロンプトを永続的なものにする場合は,.cshrc
ファイルに同じコマンドを入力してください。
7.7.1.3 すべてのシェルにおける変数の設定
Tru64 UNIX オペレーティング・システムの任意のシェルで,環境変数またはシェル変数を設定あるいは再設定するときは,次のいずれかを行います。
ログインするときにいつもその値が設定されているようにするには,該当するローカル・ログイン・スクリプトを編集します。 詳しくは,7.6 節を参照してください。
現在のログイン・セッションのためにだけその値を設定したい場合は,コマンド行から設定します。
コマンド行で変数の値を参照するには,変数名の前にドル記号 ($) を入力します。 $ によって,現在使用しているシェルは変数名を変数の値に置き換えます。 これはパラメータ置換と呼ばれるものです。
たとえば,長いパス名
/user/reports/Q1/march/sales
を表わす変数
sales
をあらかじめ定義しておいて,この変数を
cd
コマンドで使用したいとします。
これを行うには,次のように
sales
変数を指定して
cd
コマンドを入力します。
$ cd $sales $
その後,pwd
コマンドを入力して,ディレクトリが変更されたことを確認します。
$ pwd /user/reports/Q1/march/sales $
この例では,シェルは変数名
sales
をディレクトリの実際のパス名
/user/reports/Q1/march/sales
に置き換えます。
7.7.3 変数値の表示
自分のシェルに現在設定されているすべての変数の値を表示させることができます。 変数値は,単独で表示することもグループとして表示することもできます。
単一の変数の値を表示するには,echo
コマンドを次の一般形式で使用します。
echo
$variable
variable には,値を表示させる変数を指定します。
たとえば,Korn シェルを使用している場合に,SHELL 環境変数の値を表示させたいとします。 これを行うには,次のコマンドを入力します。
$ echo $SHELL /usr/bin/ksh $
Bourne,Korn,および POSIX シェルの場合,現在設定されているすべての変数の値を表示するには,オプションなしで
set
コマンドを使用します。
たとえば,次の例は Bourne シェルに現在設定されている値の一覧を表示します (使用しているシステムにより出力は異なります)。
$ set EDITOR=emacs HOME=/users/chang LOGNAME=chang MAIL=/usr/mail/chang PATH=:/usr/bin:/usr/bin/X11 PS1=$ SHELL=/usr/bin/sh TERM=xterm $
C シェルの場合,現在設定されているすべてのシェル変数の値を表示するには,オプションなしで
set
コマンドを使用します。
現在設定されているすべての環境変数の値を表示するには,オプションなしで
setenv
コマンドまたは
printenv
コマンドを使用します。
7.7.4 変数値のクリア
現在設定されている変数値のほとんどは削除することができます。 ただし,次の変数はクリアできないことに注意してください。
PATH
PS1 (Bourne,Korn,および POSIX シェル)
PS2 (Bourne,Korn,および POSIX シェル)
MAILCHECK (Bourne,Korn,および POSIX シェル)
IFS (Bourne,Korn,および POSIX シェル)
これらの変数についての詳細は,該当するシェルのリファレンス・ページ,
sh
(1b)sh
(1p)csh
(1)ksh
(1)
Bourne,Korn,および POSIX シェルでは,環境変数とシェル変数の両方を
unset
コマンドでクリアします。
unset
コマンドの形式は次のとおりです。
unset
name
name には変数名を指定します。
C シェルでは,環境変数は
unsetenv
コマンドでクリアします。
unsetenv
コマンドの形式は次のとおりです。
unsetenv
name
name には変数名を指定します。
シェル変数は
unset
コマンドでクリアします。
unset
コマンドの形式は次のとおりです。
unset
name
name には変数名を指定します。
たとえば,Korn シェルを使用している場合に,place
という変数を作成し,その変数に
U.
S.
A.
という値を割り当てているとします。
この変数をクリアするには,次のように入力します。
$ unset place $
変数の設定と参照についての詳細は,該当するシェルのリファレンス・ページを参照してください。
7.8 シェルによるコマンドの見つけ方
ユーザがコマンドを入力すると,シェルはディレクトリのリストを探索して,コマンドを見つけます。 このディレクトリのリストは PATH 環境変数によって指定します。
多くのインストレーションでは,システム管理者が新規ユーザに対して省略時の PATH ディレクトリを指定します。 しかし,経験を積んだユーザは,これらの PATH ディレクトリを変更する必要があるかもしれません。
PATH 変数には,探索するディレクトリのリストが含まれ,各ディレクトリはコロン (:) で区切られてます。 シェルは,ディレクトリがリストされている順に従って,ユーザの入力するコマンドを探索します。
PATH
の値を確認するには,
echo
コマンドを使用します。
たとえば,C シェルを使用しているときに,次のように入力したとします。
% echo $PATH /usr/bin:/usr/bin/X11 %
この
echo
コマンドからの出力は,上記の例の探索順が次のとおりであることを示しています。
なお,システムによって出力は異なります。
/usr/bin
ディレクトリが最初に探索される。
/usr/bin/X11
ディレクトリが次に探索される。
一般に,PATH
は適切なログイン・スクリプトで環境変数として設定されます。
Bourne,Korn,および POSIX シェルでは,PATH
変数は通常
.profile
スクリプトで設定されます。
C シェルでは,通常,.login
スクリプトで設定されます。
探索経路を変更したい場合は,PATH
変数に新しい値を割り当てることができます。
たとえば,Bourne シェルを使用しているとき,いくつかのオペレーティング・システムのコマンドの代りに,ユーザ独自のコマンドを使用することにしたとします。
そこで,探索パスに
$HOME/usr/bin/
を追加します。
新しい
PATH
変数値を現在のログイン・セッションについて有効なものにしたい場合は,コマンド行に次のように入力してください。
$ export PATH=$HOME/usr/bin:/usr/bin:/usr/bin/X11 $
この新しい
PATH
変数値を将来の全セッションにわたって有効にしたい場合には,.profile
スクリプトの
PATH
変数を修正してください。
.profile
スクリプトに対して行った変更は,次回ログインしたときに有効になります。
7.9 ログアウト・スクリプトの使用
セッションを終了すると自動的に実行されるログアウト・スクリプトを作成することができます。
ログイン・スクリプトと同様に,.logout
ファイルはユーザのホーム・ディレクトリになければなりません。
ログアウト・スクリプトは次の目的に使用できます。
画面をクリアする。
ログアウト・メッセージを表示する。
ログアウト後,長いバックグウンド・プロセスを実行する。
ファイル・クリーンアップ・ルーチンを実行する。
テキスト・エディタを使用して,ホーム・ディレクトリに
.logout
というファイルを作成する。
実行させるコマンドをそのファイルに入力する。
概略については1.2 節を参照。
テキストを保管して,エディタを終了する。
次のコマンドを入力して,.logout
ファイルに適切な実行許可があることを確認する。
$ chmod u+x .logout $
必ずしも
.logout
ファイルを使用する必要はありません。
これはユーザの作業環境を改善する便利な手段です。
7.9.1 ログアウト・スクリプトとシェル
C シェルを使用している場合,ログアウトすると
.logout
スクリプトが自動的に実行されます。
Korn または POSIX シェルを使用しているときに,ログアウト・スクリプトを使用したい場合は,.profile
スクリプトに特殊なトラップが設定されていることを確認しなければなりません。
トラップとは,端末からの指定された信号を探して,指定のコマンドまたはコマンド・セットを実行するコマンド・シーケンスのことです。
.profile
スクリプトに次の行が設定されていない場合には,テキスト・エディタを使用して追加しなければなりません。
trap $HOME/.logout 0
この文は,ゼロ (0) 信号を受信すると必ず
.logout
スクリプトを実行するようシステムに指示するものです。
ゼロ (0) 信号は,ログアウトするときに自動的に発生します。
7.9.2 .logout ファイルの例
この項で示すサンプルの
.logout
ファイルは,次のことを行います。
画面をクリアする。
システム名,ユーザ名,およびログアウト時刻からなるログアウト・メッセージを表示する。
別れのメッセージを表示する。
ログアウト後,バックグウンドでファイル・クリーンアップ・ルーチンを実行する。
番号記号 (#) で始まる行は,その下のコマンドについて説明しているコメント行です。
# Clear the screen clear # Display the name of your system, your user name, # and the time and date that you logged out echo `hostname` : `whoami` logged out on `date` # Run the find command in the background. This command # searches your login directory hierarchy for all # temporary files that have not been accessed in # 7 days and then deletes them. find ~ -name '*.tmp' -atime +7 -exec rm {} \; & # A parting message echo "Good Day. Come Back Soon"
シェルは,コマンド行から入力されたコマンドを実行するだけでなく,ファイルに含まれているコマンドを読み取って実行することができます。 このようなファイルは,シェル・プロシージャまたはシェル・スクリプトと呼ばれます。
シェル・プロシージャの作成は簡単で,しかもそれを使用すると,より効率的に作業を進めることができます。 たとえば,頻繁に使用するコマンドを 1 つのファイルに入れておけば,プロシージャの名前だけを入力することによって,それらを実行することができます。 このようなことからも,シェル・プロシージャを使用するとたいへん便利なことがわかるでしょう。 したがって,本来なら多数のコマンドをコマンド行に入力する必要がある反復的な作業を行う場合に役立ちます。
シェル・プロシージャはコンパイルする必要のないテキスト・ファイルであるため,作成と保守が簡単です。
各シェルには固有のネイティブ・プログラミング言語があります。 すべてのシェルにあてはまるプログラミング言語の機能を次に示します。
変数に値を格納する。
事前定義条件を検査する。
コマンドを反復して実行する。
引数をプログラムに渡す。
各シェルの特定のプログラミング機能についての詳細は,第 8 章を参照してください。
7.10.1 シェル・プロシージャの作成と実行
シェル・プロシージャの作成と実行は,次の手順に従って行います。
このファイルは,一般のテキスト・ファイルと同様に作成します。
つまり,vi
または他の編集プログラムを使用して行います。
このファイルには,任意のシステム・コマンドまたはシェル・コマンドを入れることができます。
詳しくは,
sh
(1b)sh
(1p)csh
(1)ksh
(1)
chmod +x
コマンドを使用して,ファイルに
x
(実行) 状態を付与する。
たとえば,コマンド
chmod g+x reserve
は,グループ (g
) のすべてのユーザに対して,reserve
という名前のファイルを実行可能にします。
chmod
コマンドについての詳細は,第 5 章を参照してください。
そのプロシージャ・ファイルが現在のディレクトリにない場合はパス名を入力します。
次に示す例は,ls -l
コマンドの出力をファイル・サイズによってソートする,lss
という名前の単純なシェル・プロシージャです。
#! /usr/bin/csh # lss: sort and list ls -l | sort -n +4
表 7-7
で
lss
の各行について説明します。
シェル・コマンド | 説明 |
#! /usr/bin/csh |
シェル・プロシージャを実行するシェルを指定する。 [脚注 1] |
#lss: list and sort |
シェル・プロシージャの目的を説明するコメント行。 |
ls -l | sort -n +4 |
シェル・プロシージャのコマンド。
このプロシージャはディレクトリ 内のファイルをリストする (ls -l )。
ls -l
コマンドからの出力は
sort
コマンドにパイプされる (| sort -n +4 )。
このコマンドは
ls -l
出力の最初の 4 カラムを読み飛ばし,5番目のカラム (ファイル・サイズ・カラム) を数値でソートしてから,その行を標準出力に書き込む。 |
lss
プロシージャを実行するには,lss
と入力します。
システムの出力例は次のようになります。
$ lss -rw-rw-rw- 1 larry system 65 Mar 13 14:46 file3 -rw-rw-rw- 1 larry system 75 Mar 13 14:45 file2 -rw-rw-rw- 1 larry system 101 Mar 13 14:44 file1 $
特にC シェルと他のシェルとの間には構文上の違いが存在することがあるため, シェル・プロシージャの実行に使用するシェルを指定したい場合があります。
省略時には,オペレーティング・システムは,ユーザが実行するシェル・プロシージャはログイン・シェルと同じシェルで実行されるものと想定します。 たとえば,ログイン・シェルが Korn シェルであれば,省略時には,シェル・プロシージャはその同じシェルで実行されます。
省略値を無効にする機能は,多くのユーザが実行するシェル・プロシージャにとって非常に便利なものです。 なぜなら,この機能によって,ユーザのログイン・シェルにかかわらず,シェル・プロシージャを正しいシェルで実行できるからです。 この省略時の実行シェルを変更するには,次のコマンドをシェル・プロシージャの 1 行目に入れてください。
#!shell_path
shell_path には,そのプロシージャを実行させるシェルの完全パス名を指定します。
たとえば,シェル・プロシージャをC シェルで実行したい場合には,そのシェル・プロシージャの1行目は次のようになります。
#!/usr/bin/csh