日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
SH(1) FreeBSD 一般コマンドマニュアル SH(1)
名称
sh - コマンドインタプリタ (シェル)
書式
sh [-/+abCEefIimnPpsTuVvx] [-/+o longname] [-c string] [arg ...]
解説
sh ユーティリティはシステムの標準コマンドインタプリタです。現在 sh は
IEEE Std 1003.2 (``POSIX.2'') のシェル規約に対応する途上にあります。本
バージョンのシェルは、見方によっては Korn shell と同様に見える機能を多数
持っていますが、 pdksh のような Korn shell クローンではありません。この
シェルには、POSIX で規定された仕様といくつかの Berkeley 拡張のみが取り入
れられています。本マニュアルは、shell のチュートリアルではありませんし、
仕様を完全に記述するものでもありません。
概要
シェルは、ファイルまたは端末から 1 行ずつ読み込み、それを解釈し、コマンド
を実行します。シェルはユーザがシステムにログインしたときに起動されるプロ
グラムです (ただし、ユーザは chsh(1) コマンドによって他のシェルを選択する
こともできます)。シェルは、制御構文を持つ言語であり、データ記憶をはじめと
して多様な機能を提供するマクロ機能、ヒストリ、行編集機能も内蔵していま
す。このシェルは対話的に使うときに便利な機能を多くとり入れており、対話的
に用いるときも非対話的に (シェルスクリプトとして) 用いるときも、共通のイ
ンタプリタ言語を用いることができる利点があります。すなわち、コマンド名を
シェルに直接タイプすることも、コマンド名をファイルに書いておいてそのファ
イルをシェルに直接実行させることもできます。
起動
引数が与えられず、かつシェルの標準入力が端末の場合 (または -i フラグが指
定された場合)、シェルは対話的に動作します。対話的シェルは、通常、コマンド
入力時にプロンプトを表示し、文法的なエラーとコマンドエラーを異なった方法
で処理します (後述します)。起動時に、シェルは 0 番目の引数を検査します。
もしそれがマイナス記号 (-) で始まっているなら、シェルはログインシェルとし
て動作します。ユーザがシステムにログインした場合は自動的にこの状況になり
ます。ログインシェルは、まず (以下の各ファイルが存在する場合)、
/etc/profile と次に .profile ファイルからコマンドを読み込みます。シェル起
動時に、もしくはログインシェルで .profile を実行中に環境変数 ENV が設定さ
れているなら、シェルは、その次に環境変数 ENV で示されたファイルからコマン
ドを読み込みます。つまり、ユーザはログイン時にのみ実行したいコマンドを
.profile に書き、シェルが起動されるたびに実行したいコマンドを環境変数 ENV
で示すファイルに書くことになります。環境変数 ENV を設定するには、ホーム
ディレクトリ下のファイル .profile に以下のように記述します。ここで
.shinit のかわりに好きな名前を指定することができます。
ENV=$HOME/.shinit; export ENV
コマンドライン引数で指定されたオプション以外の最初のものを、シェルはコマ
ンドを読み込むべきファイル (シェルスクリプト) の名前であると解釈し、それ
以後の引数はシェルの位置パラメータ ($1, $2, ...) に設定します。それ以外の
場合、シェルはコマンドを標準入力から読み込みます。
古いバージョンの sh とは異なり、環境変数 ENV で指定したスクリプトが実行さ
れるのは、対話的シェルの呼び出し時のみです。これにより、いい加減に書かれ
た ENV スクリプトに起因する、簡単に食いものにされることが多い有名なセキュ
リティホールがふさがれたことになります。
引数リスト処理
sh の 1 文字からなるオプションはそれぞれ対応する長い名前を持っています。
ただし -c と -/+o は例外です。次の解説では、長い名前は単一文字オプション
の隣に示されています。あるオプションの長い名前は、 sh の -/+o オプション
への引数として指定可能です。シェルが起動されてからは、オプションの長い名
前を set 組み込みコマンド (後述の 組み込みコマンドで説明) の -/+o オプ
ションへの引数として指定可能です。マイナス記号 (-) でオプションを指定する
ことは、そのオプションを有効にすることを意味し、プラス記号 (+) でオプショ
ンを指定することは、そのオプションを無効にすることを意味します。 ``--''
または、単なる ``-'' はオプション処理を終了させ、コマンドラインの残りの語
を引数として解釈することを強制します。 -/+o と -c のオプションは長い名前
を持ちません。
-a allexport
値が代入されたときに変数をエクスポートするよう、変数にフラグを付
けます。
-b notify
バックグラウンドジョブ実行の完了を、コマンドが実行中でも即座に報
告します (未実装です)。
-C noclobber
すでに存在するファイルを ``>'' リダイレクトで上書きしません。
-E emacs
組み込みの emacs(1) 風のコマンド行編集機能を有効にします (それ以
前に -V オプションが指定されていた場合、それを無効にします)。
-e errexit
非対話モードで、テスト状態にないコマンドの実行に失敗した場合、直
ちにシェルを終了します。コマンドは、if, elif, while, until 構文を
制御するのに用いられている場合に、テスト状態であるとみなされま
す。また、 ``&&'' や ``||'' の左辺値として用いられているコマンド
も、テスト状態とみなされます。
-f noglob
パス名展開を行いません。
-I ignoreeof
対話的シェルの場合、入力の EOF を無視します。
-i interactive
シェルが対話的に動作するように強制します。
-m monitor
ジョブ制御を可能にします (対話的シェルの場合は自動的に設定されま
す)。
-n noexec
非対話的シェルの場合、コマンドを読み込みますが、そのコマンドの実
行はしません。シェルスクリプトの文法を検査する場合に便利です。
-P physical
cd と pwd コマンドにおけるデフォルトを -L (論理的なディレクトリレ
イアウト) から -P (物理的なディレクトリレイアウト) へ変更します。
-p privileged
特権モードを有効にします。起動時に実効ユーザ ID あるいは実効グ
ループ ID が、実ユーザ ID や実グループ ID と一致していなければ、
このモードが有効になります。このモードを無効化すると、実効ユーザ
ID および実効グループ ID は、実ユーザ ID および実グループ ID に設
定されます。対話的シェルでこのモードが有効になっていると、
/etc/profile の後で ~/.profile に代わり、 /etc/suid_profile を読
み込みます。一方、環境変数 ENV の内容は無視されます。
-s stdin
コマンドを標準入力から読み込みます (引数でファイル名が指定されて
いない場合には、このオプションが自動的に設定されます)。シェルが実
行されてから本オプションを ( set などによって) 設定しても効果はあ
りません。
-T trapsasync
子を待つとき、即座にトラップを実行します。本オプションが設定され
ていないと、 IEEE Std 1003.2 (``POSIX.2'') で指定されているよう
に、子が終了した後にトラップが実行されます。この非標準オプション
は、シグナルをブロックする子の周囲に保護シェルを置くために有用で
す。周囲のシェルは子を殺したり、次のように、制御を tty に戻して子
だけを残したりできます:
sh -T -c "trap 'exit 1' 2 ; some-blocking-program"
-u nounset
値が設定されていない変数を展開しようとした場合、標準エラー出力に
エラーメッセージを出力し、さらに非対話的シェルならば、ただちに
シェルを終了します。
-V vi 組み込みの vi(1) 風の行編集機能を有効にします (それ以前に -E オプ
ションが指定されていた場合、それは無効になります)。
-v verbose
入力を読み込むごとに標準エラー出力に書き出します。デバッグのとき
に便利です。
-x xtrace
各コマンドを実行する前に、そのコマンドを標準エラー出力に (各コマ
ンドの前に ``+ '' を付加して) 書き出します。デバッグのときに便利
です。
-c オプションは、シェルの入力として解釈させる文字列引数を渡すために使用可
能です。このオプションは引数として文字列を一つだけ受け取ることに注意して
下さい。ですから、複数の単語からなる文字列は引用符で囲う必要があります。
-/+o オプションは、オプションの長い名前のみを引数としてとり、オプションの
有効化と無効化を行います。例えば、次の 2 つの sh 起動方法では組み込みの
emacs(1) コマンドラインエディタを有効化します:
set -E
set -o emacs
-o オプションが引数なしで使用された場合、現在のオプション設定を人が読める
形式で表示します。 +o が引数なしで使用された場合は、現在のオプション設定
をシェルへ再入力するのに適した形式で出力します。
構文構造
シェルは、ファイルを行単位で読み込み、空白文字 (ブランクおよびタブ) や
シェルにとって特別な意味を持つ特定の文字列 ( ``演算子'' と呼ばれるもので
す) を区切りとして、複数の単語に分割します。演算子には、制御演算子とリダ
イレクト演算子の 2 種類があります (これらの意味については後述します)。以
下に、それらの一覧を示します。
制御演算子:
& && ( ) \n
;; ; | ||
リダイレクト演算子:
< > << >> <>
<& >& <<- >|
引用 (クォート)
引用は、特殊な意味を持つ文字や単語 (演算子、空白、キーワードなど) の意味
を打ち消すために用います。引用には、シングルクォート文字のペアを使う方
法、ダブルクォート文字のペアを使う方法、バックスラッシュ文字を使う方法の
3 種類があります。
シングルクォート文字
シングルクォートのペアで囲まれた文字は、すべてその文字そのまま (
リテラル) として扱われます (ただしシングルクォートは別です。シン
グルクォートで囲った文字列の中にシングルクォートを含めることはで
きません)。
ダブルクォート文字
ダブルクォートのペアで囲まれた文字は、ドル記号文字 ($) 、バック
クォート文字 (`) 、バックスラッシュ文字 (\) を除き、すべてリテラ
ルとして扱われます。ダブルクォート文字による引用の中にあるバック
スラッシュ文字は、歴史的経緯によりすこし変わった扱いを受けます。
次の文字の前にある場合はクォートになりますが、それ以外ではリテラ
ルのままとなります:
$ ` " \ \n
バックスラッシュ
バックスラッシュは、その後ろの 1 文字を、リテラルとして扱うように
指示します。ただし改行文字 (\n) は別です。改行文字の直前のバック
スラッシュは、行の継続であるとみなされます。
予約語
予約語はシェルにとって特別な意味を持つ単語で、行の先頭または制御演算子の
直後でのみ予約語として認識されます。以下に予約語の一覧を挙げます。
! { } case do
done elif else esac fi
for if then until while
エイリアス
エイリアスは、名前とそれと対応する値が対になったもので、組み込みコマンド
alias によって定義されます。シェルは、予約語が現れる可能性がある場所 (上
記を参照) で、ある単語に対して、それが予約語かどうかの検査を済ませたの
ち、それがエイリアスに一致するかどうかを検査します。もし一致したならば、
入力行の中で、その単語をエイリアスの値に置き換えます。たとえば、 ``lf''
という名前で ``ls -F'' という値を持つエイリアスが存在したとすると、次の入
力行
lf foobar
は、以下のように置換されます。
ls -F foobar
エイリアスは、初心者に対し、引数付きの関数を生成する面倒を求めることな
く、短いコマンドを作り出す便利な方法を提供するものです。しかし、構文的に
あいまいなコードを作り出すことにもつながりかねません。そのような使い方は
お勧めできません。
コマンド
シェルは、読み込んだ単語を、文法に従って解釈します。本マニュアルでは文法
については解説しません。 IEEE Std 1003.2 (``POSIX.2'') の BNF 表記を参照
してください。要するに、行を 1 行を読み込み、読み込んだ行の最初の単語 (
制御演算子がある場合は、そのあとの最初の単語) が予約語でない場合、シェル
はその行を単純コマンドとして解釈します。それ以外の場合、複合コマンドある
いは特殊構造であると解釈します。
単純コマンド
単純コマンドを解釈する場合、シェルは以下のような動作をします。
1. 単語の前にある ``name=value'' の形式の単語を取り除き、単純コマンドの
環境に代入します。リダイレクト演算子とその引数 (後述) を取り除き、あ
とで処理できるように保存します。
2. 残った単語を、 単語展開の節で説明する方法で展開します。展開後の最初
の単語をコマンド名とみなし、コマンドの位置を探索します。残りの単語は
コマンドへの引数とみなされます。処理の結果、コマンド名が残らなかった
場合、手順 1) で取り出した ``name=value'' の変数代入を、現在のシェル
の環境に反映します。
3. 次節で説明する方法で、リダイレクトを行います。
リダイレクト
リダイレクトは、コマンドがどこから入力するか、どこへ出力するかを変更する
ときに用います。一般には、リダイレクトでは、ファイルのオープン、クロー
ズ、またはファイルへの参照の複製 (duplicate) を行います。リダイレクトで用
いられる全般的な形式は、以下のとおりです。
[n] redir-op file
ここで、 `redir-op' は前述したリダイレクト演算子のいずれかです。これらの
演算子をどのように利用するかの例をいくつか以下に挙げます。
[n]> file 標準出力 (またはファイル記述子 n) を file にリダイレ
クトします
[n]>| file 上と同様。ただし -C オプションの効果を打ち消します。
[n]>> file 標準出力 (またはファイル記述子 n) を file に追加しま
す。
[n]< file 標準入力 (またはファイル記述子 n) を file からリダイ
レクトします。
[n]<> file 標準入力 (またはファイル記述子 n) を file から/へ、リ
ダイレクトします。
[n1]<&n2 ファイル記述子 n2 を標準入力 (またはファイル記述子
n1) に複製します。
[n]<&- 標準入力 (またはファイル記述子 n) をクローズします。
[n1]>&n2 標準出力 (またはファイル記述子 n1) をファイル記述子
n2 に複製します。 (訳注: 通常は「ファイル記述子 n2 を
標準出力 (またはファイル記述子 n1) に複製」と表現しま
す。結果は、標準出力 (または n1 への出力) の n2 への
リダイレクトです。)
[n]>&- 標準出力 (または n) をクローズします。
以下のリダイレクトは、しばしば ``ヒア・ドキュメント (here-document)'' と
呼ばれます。
[n]<< delimiter
here-doc-text
...
delimiter
シェルは、delimiter までの行を保存し、コマンドへの標準入力またはファイル
記述子 n にリダイレクトします。最初の行の delimiter が引用 (クォート) さ
れていた場合、here-doc-text の内容をリテラルとして扱います。そうでない場
合、パラメータ展開、コマンド置換、数値演算 ( 単語展開の節で説明します) を
適用します。演算子が ( ``<<'' でなく) ``<<-'' の場合は、 here-doc-text の
各行の行頭のタブを取り除きます。
コマンド検索と実行
コマンドには、シェル関数、組み込みコマンド、通常プログラムの 3 種類があ
り、コマンドを検索する際には、シェルは名前の検索をこの順序で行います。 3
種類のコマンドは異なる方法で実行されます。
シェル関数を実行するとき、$0 を除くすべての位置パラメータ ($1, $2,..) を
シェル関数への引数として設定します。$0 は変更されません。シェル関数の環境
として指定された変数 (関数名の直前に ``name=value'' を置いて指定されたも
の) は、その関数に局所的な変数となり、指定された初期値が設定されます。そ
して、シェルは関数定義で与えられたコマンドを実行します。コマンドの実行が
完了すると、位置パラメータを元の値に戻します。これは全て現在のシェルの中
で処理されます。
シェルの組み込みコマンドは、新たなプロセスを作成せずにシェル内部で実行さ
れます。
コマンドが関数でも組み込みコマンドでもない場合は、通常のプログラムとみな
し (次節で説明するとおり) ファイルシステムの中でそのコマンドを検索しま
す。通常のプログラムを実行する場合、シェルは引数と環境をプログラムに渡し
て、そのプログラムを実行します。プログラムが通常の実行ファイル形式ではな
い場合 (つまり、 ASCII 表現で "#!" となる "マジックナンバ" でファイルが始
まっておらず、 execve(2) が ENOEXEC を返す場合)、サブシェルの中でそのプロ
グラムを解釈実行します。この場合、あたかも新たにシェルが起動されたかのよ
うな効果を得るために、子シェルは自分自身を再初期化します。ただし、子プロ
セスは、親シェル中のハッシュされたコマンド位置情報を憶えており、これは再
初期化されません。
本ドキュメントの古いバージョンや古いソースコードでは、ときおり、マジック
ナンバのないシェルスクリプトのことを "シェル手続き" と呼んでいて、まぎら
わしい場合がありますので注意して下さい。
パス検索
コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどう
かを調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。
組み込みコマンドでもない場合、以下のいずれかの処理が行われます:
1. コマンド名にスラッシュが含まれていれば、検索は行わず、単にそのコマン
ドが実行されます。
2. 変数 PATH に含まれる各エントリに対して、順にそのコマンドを検索しま
す。変数 PATH の値はコロンで区切られたエントリの列でなければなりませ
ん。各エントリは、それぞれディレクトリ名一つに対応します。カレント
ディレクトリは、空のディレクトリ名を指定することで暗黙的に、あるいは
1 個のピリオドを指定することで明示的に指示することができます。
コマンドの終了ステータス
各コマンドは終了ステータスを持ち、それにより他のシェルコマンドの動作に影
響を与えることができます。基本的な考え方として、終了ステータス 0 は通常の
終了または成功を示します。0 以外の終了ステータスは失敗、エラーを意味しま
す。各コマンドのマニュアルにそれぞれの終了ステータスがどのような意味を持
つかが記述されているはずです。組み込みコマンドと (実行された) 関数も終了
ステータスを返します。
コマンドがシグナルにより終了 (terminate) させられた場合、終了ステータスは
128 にシグナル番号を加えたものになります。シグナル番号はヘッダファイル
<sys/signal.h> に定義されています。
複合コマンド (Complex Commands)
複合コマンドは、単純コマンドの組み合わせで作ります。制御演算子または予約
語と組み合わせることで、より大きな複合コマンドを生成します。一般に、コマ
ンドは以下のうちのいずれかです。
単純コマンド
パイプライン
リストまたは合成リスト (compound-list)
合成コマンド (compound command)
関数定義
特に指定のない場合、コマンドの終了ステータスは最後に実行された単純コマン
ドの終了ステータスとなります。
パイプライン
パイプラインは、複数のコマンドを制御演算子 `|' によってつないだものです。
最後のコマンドを除くすべてのコマンドの標準出力は、次のコマンドの標準入力
に接続されます。最後のコマンドの標準出力は、通常通り、シェルから受け継が
れます。
パイプラインの形式は次のとおりです。
[!] command1 [| command2 ...]
command1 の標準出力は command2 の標準入力に接続されます。コマンドの標準入
出力がパイプラインによって割り当てられるのは、各コマンドに属するリダイレ
クト演算子で指定されたリダイレクトを処理する前のことだと考えて下さい。
パイプラインがバックグラウンド (後述) でなければ、シェルはすべてのコマン
ドが終了するのを待ちます。
パイプラインの直前に予約語 `!' が置かれなかった場合、終了ステータスはパイ
プラインの最後のコマンドの終了ステータスとなります。 `!' が前置された場
合、終了ステータスはパイプラインの最後のコマンドの終了ステータスの論理否
定を取った値となります。すなわち、最後のコマンドが 0 を返した場合、パイプ
ラインの終了ステータスは 1 に、最後のコマンドが 0 より大きな値を返した場
合、終了ステータスは 0 になります。
パイプラインによる標準入出力の接続はリダイレクトに先立って行われるため、
パイプラインの接続をリダイレクトによって修正することができます。たとえ
ば、
$ command1 2>&1 | command2
`command1' の標準出力と標準エラー出力の両方を `command2' の標準入力に接続
します。
``;'' または改行文字を終端として用いることにより、直前の AND-OR リスト (
短絡リスト演算子で後述) を順次実行します。 ``&'' は、直前の AND-OR リスト
を非同期に実行します。
注: 他のいくつかのシェルと異なり、 sh ではパイプラインの各プロセスは起動
した sh の子プロセスとなります。シェルの組み込みコマンドであるときは別で
す。その場合は現在のシェルで実行されますが、環境に対する操作は影響を与え
ません。
バックグラウンドコマンド (&)
コマンドが制御演算子がアンパサンド (&) で終了している場合、シェルはそのコ
マンドを非同期に実行します。すなわち、シェルはそのコマンドの終了を待たず
に、次のコマンドの実行を開始します。
コマンドをバックグラウンドで実行させるための形式は以下のとおりです。
command1 & [command2 & ...]
シェルが対話的でない場合、非同期コマンドの標準入力には /dev/null が接続さ
れます。
リスト (一般的な話)
リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アンパサ
ンド文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで終
了させることもできます。リスト中のコマンドは並べられた順に実行されます。
もし、コマンドに続けてアンパサンド文字が置かれている場合、シェルはそのコ
マンドを起動したあと、すぐに次のコマンドの処理を開始します。その他の場
合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。
短絡リスト演算子 (Short-Circuit List Operators)
``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンドを実
行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを実行しま
す。 ``||'' も同様ですが、最初のコマンドの終了ステータスが 0 でない場合
に、次のコマンドを実行します。 ``&&'' と ``||'' の優先順位は同じです。
制御構造 (if, while, for, case)
if コマンドの文法は以下のとおりです。
if list
then list
[elif list
then list] ...
[else list]
fi
while コマンドの文法は以下のとおりです。
while list
do list
done
最初のリストの終了ステータスが 0 であるかぎり、2 つのリストを繰り返し実行
します。 until コマンドも同様に実行しますが、単語 while の代わりに単語
until を使うことと、最初のリストの終了ステータスが 0 になるまで、 2 つの
リストを繰り返し実行することが異なります。
for コマンドの文法は以下のとおりです。
for variable in word ...
do list
done
各 word は展開され、変数 variable に word を順に設定しながらリストを繰り
返し実行します。 do と done は ``{'' と ``}'' で置き換えることができま
す。
break と continue コマンドの文法は以下のとおりです。
break [num]
continue [num]
break は内側から num 個の for ループまたは while ループを終了します。
continue は内側から num 個のループの次の繰り返しに制御を移します。これら
のコマンドは組み込みコマンドとして実装されています。
case コマンドの文法は以下のとおりです。
case word in
pattern) list ;;
...
esac
pattern は、1 つあるいは複数のパターン (後述の シェルパターンを参照のこ
と) を ``|'' で接続したものです。
複数のコマンドのグループ化
コマンドは、以下のいずれかの方法によりグループ化することができます。
(list)
または、
{ list; }
最初の形式では、コマンドはサブシェル上で実行されます。この組み込みコマン
ドは現在のシェルには影響を与えないことに注意してください。 2 つめの形式で
は新たなシェルを fork しないので、やや効率が良くなります。このようにして
複数コマンドをグループ化することで、あたかも単一プログラムであるかのよう
に、それらの出力をまとめてリダイレクトすることができます。
{ echo -n "hello"; echo " world"; } > greeting
関数
関数定義の構文は以下のとおりです。
name ( ) command
関数定義は実行可能文の一種です。実行されると、名前 name の関数が定義さ
れ、終了ステータスとして 0 を返します。command は通常、 ``{'' と ``}'' で
囲まれたリストです。
local コマンドを用いて関数に局所的な変数を宣言することができます。これは
関数定義中の最初の文で行わなければなりません。構文は次のとおりです。
local [variable ...] [-]
local コマンドは、組み込みコマンドとして実装されています。
変数を局所変数にする場合、関数を呼び出した環境に同じ名前の変数があれば、
新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名前
の変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープを用
います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から関数 g を
呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x ではなく、
関数 f で宣言された変数 x への操作となります。
特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を局所宣言
すると、関数内で set コマンドを用いてシェルオプションを変更しても、関数が
終了するとそれらのオプションは元の値に戻ります。
return コマンドの文法は以下のとおりです。
return [exitstatus]
return は現在実行中の関数を終了させます。 return は組み込みコマンドとして
実装されています。
変数とパラメータ
シェルはパラメータの集合を管理しています。名前を持つパラメータを変数と呼
びます。シェルは、起動時にすべての環境変数をシェル変数に取り込みます。新
たな変数は、次の形式によって設定できます。
name=value
ユーザが設定する変数は、アルファベット、数字、アンダスコア (_) のみからな
る名前を持つ必要があります。また、最初の文字が数字であってはいけません。
パラメータは、以下に示す数字または特殊記号により参照することもできます。
位置パラメータ
位置パラメータは、0 より大の数字によって参照されるパラメータです。シェル
は位置パラメータの初期値としてシェルスクリプト名に続く引数を設定します。
組み込みコマンド set により再設定や消去ができます。
特殊パラメータ
特殊パラメータは、以下に挙げる特殊文字のいずれかにより参照されるパラメー
タです。各パラメータの値の説明を各文字の後ろに示します。
* 位置パラメータ 1,2,... に展開されます。ダブルクォート文字列内部で
展開される場合、展開結果は各位置パラメータの間を変数 IFS の先頭の
文字 ( IFS が設定されていない場合は <空白文字> ) で区切った単一の
文字列になります。
@ 位置パラメータ 1,2,... に展開されます。ダブルクォート引用の内部で
展開される場合、各位置パラメータは別々の引数となります。もし、位
置パラメータが設定されていない場合には、 @ の展開結果は 0 個の引
数となります (ダブルクォート引用の内部であっても)。すなわち、$1
が ``abc'' 、$2 が ``def ghi'' であった場合、 "$@" は次の 2 つの
引数に展開されます。
"abc" "def ghi"
# 位置パラメータの数に展開されます。
? 最後に実行したパイプラインの終了ステータスに展開されます。
- (ハイフン) 現在のオプションフラグ (1 文字オプション名をつないだ文
字列) に展開されます。起動時に指定されたもの、組み込みコマンド
set で指定したもの、シェルが暗黙に設定したもののすべてを含みま
す。
$ 起動されたシェルのプロセス ID に展開されます。サブシェルも親シェ
ルと同じ値を持ちます。
! 現在のシェルが最後にバックグラウンドで実行したコマンドのプロセス
ID に展開されます。パイプラインの場合、パイプラインの最後のコマン
ドのプロセス ID になります。
0 (ゼロ) シェルの名前またはシェルスクリプト名に展開されます。
単語展開
本節では、単語に対して適用されるさまざまな展開について説明します。あとで
述べるように、すべての展開がすべての単語に対して適用されるわけではありま
せん。
単一の単語に対して適用されたチルダ展開、パラメータ展開、コマンド置換、数
式展開、クォート削除の結果は単一のフィールドになります。単一の単語が複数
のフィールドに分割される可能性があるのは、フィールド分割またはパス名展開
の場合だけです。この規則の唯一の例外は、ダブルクォート中のパラメータ @ の
展開です (前述)。
単語展開の順序は以下のとおりです。
1. チルダ展開、パラメータ展開、コマンド置換、数式展開 (これらはすべて同
時に行われます)
2. 変数 IFS の値が空でなければ、(1) の結果の各フィールドに対してフィー
ルド分割が行われる
3. パス名展開 ( -f オプションが無効の場合)
4. クォート削除
文字 ``$'' はパラメータ展開、コマンド置換、数式評価を行うきっかけになりま
す。
チルダ展開 (ユーザのホームディレクトリ名への置換)
引用されていないチルダ文字 (~) で始まる単語は、チルダ展開の対象になりま
す。チルダ文字からスラッシュ文字 (/) または単語の終端までのすべての文字が
ユーザ名とみなされ、そのユーザのホームディレクトリに置換されます。もし
ユーザ名が省略された場合 (たとえば ~/foobar)、チルダ文字は変数 HOME の値
(現在のユーザのホームディレクトリ) に置換されます。
パラメータ展開
パラメータ展開の形式は以下のとおりです。
${expression}
ここで、expression は対応した ``}'' までのすべての文字です。対応する
``}'' を調べる際に、バックスラッシュ文字によりエスケープされたり、クォー
ト文字に狭まれた ``}'' や、数式展開に埋め込まれている文字や、コマンド置換
や変数展開中にある文字は調べる対象になりません。
パラメータ展開の形式のうちもっとも単純なものは以下のとおりです。
${parameter}
そのパラメータに値が存在する場合、その値に置き換えられます。
パラメータ名やシンボルを中括弧 ({}) で囲んでも構いません。この中括弧は、
数字 2 文字以上からなる位置パラメータの場合や、パラメータ名の直後にパラ
メータ名の一部であるとみなし得る文字が続く場合を除き、省略可能です。ダブ
ルクォート引用中のパラメータ展開は以下のようになります。
1. パラメータ展開を行った結果の単語に対しては、パス名展開は適用されませ
ん。
2. パラメータが特殊パラメータ @ の場合を除き、フィールド分割は適用され
ません。
さらに、以下の形式を用いることにより、パラメータ展開の結果に修正を加える
ことができます。
${parameter:-word}
デフォルト値への置換: パラメータ parameter が設定されていないか空
の値を持つ場合、word を展開した結果に置換されます。さもなければ、
パラメータ parameter の値に置換されます。
${parameter:=word}
デフォルト値の代入: パラメータ parameter が設定されていないか空の
値を持つ場合、word を展開した結果が parameter に代入されます。最
終的にパラメータ parameter の値に置換されます。位置パラメータや特
殊パラメータは、この方法で代入することはできません。
${parameter:?[word]}
空か設定されていないときにエラーとする: パラメータ parameter が設
定されていないか空の値を持つ場合、word を展開した結果 (word が省
略された場合にはパラメータが設定されていないことを表すデフォルト
のメッセージ) が標準エラー出力に書き出され、シェルは非 0 の終了ス
テータスで終了します。それ以外の場合、パラメータ parameter の値に
置換されます。対話的シェルの場合は必ずしも終了しません。
${parameter:+word}
代替値の使用: パラメータ parameter が設定されていないか空の値を持
つ場合、空の値に置換されます。さもなければ、word を展開した結果に
置換されます。
以上のパラメータ展開において、`:' を用いた場合はパラメータが設定されてい
ないかまたは空の値であることが検査され、`:' を省略するとパラメータが設定
されていないことのみを検査します。
${#parameter}
文字列の長さ: パラメータの値の (文字列としての) 長さに置換されま
す。
以下の 4 通りのパラメータ展開は部分文字列切り出し処理を行います。各場合に
おいて、パターンは正規表現ではなく、パターンマッチ記法 ( シェルパターンの
項を参照) が用いられます。パラメータが * または @ の場合、展開の結果がど
うなるかは規定しません (unspecified)。パラメータ展開全体をダブルクォート
で囲んでもパターンは引用されません。中括弧のなかで引用することによりパ
ターンを引用することができます。
${parameter%word}
最短後置パターンの削除: まず word が展開され、その結果をパターン
として扱います。パラメータ parameter の右から、パターンに一致する
最短の部分を削除した文字列に置換されます。
${parameter%%word}
最長後置パターンの削除: まず word が展開され、その結果をパターン
として扱います。パラメータ parameter の右から、パターンに一致する
最長の部分を削除した文字列に置換されます。
${parameter#word}
最短前置パターンの削除: まず word が展開され、その結果をパターン
として扱います。パラメータ parameter の左から、パターンに一致する
最短の部分を削除した文字列に置換されます。
${parameter##word}
最長前置パターンの削除: まず word が展開され、その結果をパターン
として扱います。パラメータ parameter の左から、パターンに一致する
最長の部分を削除した文字列に置換されます。
コマンド置換
コマンド置換により、コマンド名自身をコマンドの出力で置き換えることができ
ます。コマンド置換は、以下のように、コマンド command を囲った場合、
$(command)
またはバッククォートバージョン
`command`
とした場合に行われます。シェルは、コマンド command をサブシェルの環境で実
行し、command が標準出力に出力したものから最後の改行文字を削除した結果で
置換します。最後以外の改行は削除しません。ただし、フィールド分割の際に、
IFS の値や引用のされかたによっては、ここで残った改行文字が結局は空白に置
換されることもあります。
数式展開
数式展開とは、数式を評価し、その値に置換する仕組みです。数式展開の形式は
以下のとおりです。
$((expression))
数式 expression は、その中のダブルクォート文字が特別扱いを受けないという
点を除いては、ダブルクォート文字で囲まれている文字列と同様に扱われます。
シェルは expression 中のすべてのトークンにパラメータ展開、コマンド置換、
クォート削除を適用します。
次にシェルはその結果を数式として扱い、その値に置換します。
空白文字による分割 (フィールド分割)
パラメータ展開、コマンド置換、数式展開のあと、シェルは展開結果を調べて、
ダブルクォートの外にある部分に対してフィールド分割を適用します。その結
果、複数のフィールドになる場合もあります。
シェルは、変数 IFS に設定されている文字それぞれ区切り文字とみなし、パラ
メータ展開の結果、およびコマンド置換の結果をフィールドに分割します。
パス名展開 (ファイル名生成)
-f フラグが設定されていなければ、フィールド分割が行われたあと、ファイル名
生成が行われます。各単語は、スラッシュで区切られたパターンの列であるとみ
なされます。パス名展開処理において、単語は、条件を満たすファイルすべての
ファイル名の列で置換されます。この各ファイル名は、単語の各パターン部分
を、そのパターンに一致する文字列に置換することで生成されるものです。これ
には 2 つの制限があります: まず、パターンはスラッシュを含む文字列には一致
しません。次に、パターンは、そのパターンがピリオドで始まらないかぎり、ピ
リオドで始まる文字列に一致しません。次節では、パス名展開と case コマンド
で用いられるパターンについて説明します。
シェルパターン
パターンは、通常の文字とメタキャラクタからなります。通常の文字は、その文
字そのものに一致します。メタキャラクタは ``!'', ``*'', ``?'', ``['' で
す。これらの文字を引用すると、各々の特殊な意味を失います。コマンド置換や
変数置換において、ドル記号やバッククォート文字がダブルクォート文字の中に
ない場合には、変数の値やコマンドの出力の中に、これらの特殊な文字が存在す
るかどうかが調べられ、それらがあれば、メタキャラクタとして扱われます。
アスタリスク文字 (*) は、どのような文字列とも一致します。クエスチョンマー
ク文字 (?) は、任意の文字 1 文字と一致します。左大括弧 ([) は文字クラスを
開始します。文字クラスの最後は右大括弧 (]) です。 ``]'' がない場合は、
``['' は文字そのものに一致し、文字クラスの開始とは見なされません。文字ク
ラスは大括弧内に出現するすべての文字に一致します。マイナス記号を用いれ
ば、文字の範囲を指定することができます。文字クラスの最初にエクスクラメー
ションマーク (!) を置くことで、文字クラスの意味を反転させることができま
す。
文字クラスに文字 ``]'' を含めるには、 ``]'' を文字クラスの最初 ( ``!'' を
置く場合はそのあと) に置きます。文字クラスに ``-'' を含めるときも同様で、
リストの最初もしくは最後に置きます。
シェル組み込みコマンド
本節では、別プロセスでは実行できない処理を行うために組み込まれているコマ
ンドを列挙します。さらに、組み込みバージョンの test(1) が効率を上げるため
に提供されています。
: 終了ステータス 0 (真) を返すヌルコマンドです。
. file 指定されたファイル file に記述されたコマンドがシェルに読み込ま
れ、実行されます。 file に ``/'' 文字を含む場合、その通りに扱われ
ます。そうでなければ、シェルは PATH を使用して、ファイルを検索し
ます。 PATH を使用しても見付からない場合、カレントディレクトリを
検索します。
alias [name ...]
alias [name=string ...]
name=string が指定されている場合、シェルは名前 name を持つ値
string のエイリアスを定義します。単に ``name'' だけが指定された場
合、エイリアス ``name'' の値が表示されます。引数が指定されない場
合、 alias は定義されているすべてのエイリアスの名前と値を表示しま
す ( unalias も参照)。エイリアスの値は適切にクォートされており、
シェルへ再入力するのに適しています。
bg [job ...]
指定されたジョブ (指定されなかった場合は現在のジョブ) を、続けて
バックグラウンドで実行させます。
builtin cmd [arg ...]
指定された組み込みコマンド cmd を実行します。シェル関数を同名の組
み込みコマンドでオーバライドしたい場合に有用です。
bind [-aeklrsv] [key [command]]
行編集機能のキーバインドを表示もしくは変更します。このコマンドに
ついては editrc(5) で説明されています。
cd [-L | -P] [directory]
指定されたディレクトリ directory に移動します。 directory 無指定
時は HOME で指定されるディレクトリに移動します。 directory が /,
., .. のいずれでも開始しない場合、指定された directory を CDPATH
変数中のディレクトリリストから検索します。 CDPATH が設定されてい
ない場合、カレントディレクトリを検索します。 CDPATH の形式は PATH
と同様です。対話的シェルでは、ユーザが指定したディレクトリと異な
る場所に移動した場合、 cd は、移動先のディレクトリ名を表示しま
す。これは、 CDPATH の機構が動作した場合と、シンボリックリンクを
辿った場合に発生します。
-P オプションが指定された場合、 .. は物理的に扱われ、シンボリック
リンクは .. 部分が処理される前に解決されます。 -L オプションが指
定された場合は、 .. は論理的に扱われます。こちらがデフォルトに
なっています。
chdir cd 組み込みコマンドの別名です。
command [-p] [utility [argument ...]]
指定された utility を単純コマンドとして実行します ( 単純コマンド
セクションを参照)。
-p オプションが指定された場合、コマンド検索は、 PATH のデフォルト
値を用いて行われます。これにより全ての標準ユーティリティを見つけ
ることが保証されます。
echo [-e | -n] [string]
string の後に改行文字を付けて、標準出力に表示します。
-n 最後の改行文字を抑制します。
-e C 風のバックスラッシュエスケープシーケンスを処理します。
echo は次の文字エスケープを理解します:
\a 警告 (端末ベルを鳴らす)
\b バックスペース
\c 最後の改行文字を抑制します (改行文字が最後の文字
でない場合、行が縮んでしまうという副作用がありま
す)
\e ESC 文字 (ASCII 0x1b)
\f フォームフィード
\n 改行
\r 復改
\t 水平タブ
\v 垂直タブ
\\ バックスラッシュ文字
\0nnn (この 0 はゼロです) 8 進数値が nnn である文字
string がクォートで括られていない場合、シェルからエスケー
プするためには、バックスラッシュ自身をバックスラッシュで
エスケープする必要があります。例えば次の通りです:
$ echo -e "a\vb"
a
b
$ echo -e a\\vb
a
b
$ echo -e "a\\b"
a\b
$ echo -e a\\\\b
a\b
-e と -n オプションのうち、どちらか片方のみを指定できます。
eval string ...
指定されたすべての引数を空白で結合し、その結果を解析し直してから
コマンドとして実行します。
exec [command [arg ...]]
commmand が省略されない場合、そのシェルプロセスは指定されたプログ
ラムに置き換えられます ( command は、シェル組み込みコマンドや関数
ではない、本物のプログラムでなければなりません)。 exec コマンドに
おけるリダイレクトは、永久性を持つと見なされ、 exec コマンド完了
後にも引き続き効力を持ちます。
exit [exitstatus]
シェルを終了します。 exitstatus が指定された場合、これはシェルの
終了ステータスになります。そうでない場合、直前に実行したコマンド
の終了ステータスがシェルの終了ステータスとなります。
export [-p] [name ...]
それ以後にシェルから実行されるコマンドの環境に、指定された名前の
変数が含まれるようにします (変数のエクスポート)。変数のエクスポー
トを取り消す唯一の方法は、変数を unset することです。以下のように
記述することで、エクスポートすると同時に変数の値を設定することが
できます。
export name=value
引数を指定しない場合、すべてのエクスポートされている名前と値が表
示されます。 -p オプションが指定された場合、エクスポートされてい
る変数は、一行毎に ``export name=value'' という形式で表示されま
す。これはシェルへ再入力するのに適しています。
fc [-e editor] [first [last]]
fc -l [-nr] [first [last]]
fc -s [old=new] [first]
fc 組み込みコマンドは、対話的シェルにそれ以前に入力されたコマンド
の内容を、表示、編集、再実行します。
-e editor
編集に際し、指定されたエディタ editor を使用します。
editor は変数 PATH を通して検索できるコマンド名です。 -e
が指定されなかった場合は、変数 FCEDIT の値が用いられま
す。 FCEDIT が設定されていないか空に設定されている場合は
EDITORの値が用いられ、それも設定されていないか空ならば
ed(1) が用いられます。
-l (ell)
(小文字のエル) エディタを起動せずに、コマンド履歴の内容を
一覧出力します。パラメータ first と last で指定した範囲の
コマンドが順に (出力の順番は -r オプションの影響を受けま
す) 出力されます。各コマンドの出力の際にはコマンド番号が
付加されます。
-n -l で一覧出力する際にコマンド番号を付加しません。
-r コマンド一覧時 ( -l オプション指定時) や編集時 ( -l も -s
も指定されなかった場合) の順序を反転します。
-s エディタを起動せずにコマンドを再実行します。
first
last 一覧出力や編集の対象となるコマンドを選択します。アクセス
可能なコマンドの数は変数 HISTSIZE の値で決まります。
first または last 、または両方の値は、以下のいずれかの形
式で指定します。
[+]num 正の数で、コマンド番号を指定します。コマンド番号
は -l オプションで表示させて調べることができま
す。
-num 負の数は、 num 個だけ現在から遡ったコマンドを指定
します。たとえば、 -1 は直前に実行されたコマンド
を指定します。
string 文字列 string は、過去に実行されたコマンドのう
ち、その文字列から始まる最新のものを指定します。
もし -s オプションが指定されて old=new が指定され
ていなければ、最初のオペランドにイコール記号を含
めることはできません。
fc コマンドの実行にあたり、以下の環境変数の影響を受けます。
FCEDIT 使用するエディタ名
HISTSIZE
アクセス可能なコマンド数
fg [job]
指定されたジョブ job または現在のジョブをフォアグラウンドに移動し
ます。
getopts optstring var
POSIX に準拠した getopts コマンドです。この getopts コマンドによ
り、以前の getopt(1) コマンドの必要性は減少しました。最初の引数は
文字の列です。各文字の後ろにはコロンをつけることができ、そのオプ
ションが引数をとることを指示します。指定された変数に、解析され見
つかったオプションが設定されます。見つかったオプションの次の引数
のインデックスはシェル変数 OPTIND に格納されます。あるオプション
が引数をとる場合、その引数はシェル変数 OPTARG に置かれます。有効
でないオプションに出くわすと、変数 var には ``?'' がセットされま
す。 getopts はオプション群の末尾に到達すると偽の値 (1) を返しま
す。
hash [-rv] [command ...]
シェルは、コマンドの位置を保持するハッシュテーブルを維持管理して
います。 hash コマンドに引数が指定されなかった場合、このテーブル
の内容が出力されます。最後に cd コマンドが実行されてから参照され
ていない項目にはアスタリスク文字が表示されます。この項目は無効に
なっているかもしれません。
引数を指定した場合、 hash コマンドは指定した command をハッシュ
テーブルから削除し ( command が関数ではない場合)、その後でそのコ
マンドを検索します。 -v オプションを指定した場合、 hash は発見し
たコマンドの位置を表示します。 -r オプションを指定した場合、 hash
は関数以外のすべてのエントリをハッシュテーブルから削除します。
jobid [job]
ジョブ job 中の各プロセスのプロセス ID を表示します。引数 job が
省略された場合、現在のジョブに対して処理を行います。
jobs [-ls] [job ...]
指定されたジョブの情報を表示します。 job 引数が指定されなかった場
合は、全てのジョブの情報を表示します。情報には、ジョブ ID、ステー
タス、コマンド名が含まれます。
-l オプションが指定された場合、各々のジョブの PID も表示されま
す。 -s オプションが指定された場合、一行毎にジョブの PID のみが表
示されます。
pwd [-L | -P]
カレントディレクトリのパスを表示します。組み込みコマンド版はカレ
ントディレクトリ名を覚えており、表示するときに再計算しないので、
組み込みコマンド版は同名のプログラムとは異なった表示をする場合が
あります。このため処理は高速ですが、カレントディレクトリの名前を
変更した場合でも、組み込み版の pwd(1) は以前のディレクトリ名を表
示し続けます。
-P オプションが指定された場合、シンボリックリンクは解決されます。
-L オプションが指定された場合、カレントディレクトリはシェルの表記
で表示されます (シンボリックリンクは解決されません)。こちらがデ
フォルトです。
read [-p prompt] [-t timeout] [-er] variable ...
-p オプションが指定され、かつ標準入力が端末の場合、 prompt をプロ
ンプトとして表示します。そして標準入力から 1 行入力します。行端の
改行文字を削除し、行を前述の 空白文字による分割 (フィールド分割)
の方法に従って分割し、各単語を、valiable... で指定する各変数に順
に代入します。もし、指定された変数の数より分割された単語の数が多
ければ、最後の変数に残りの単語すべて ( IFS の文字を区切りにしてそ
れらも一緒に) が代入されます。分割された単語の数より多くの変数が
指定されていたなら、余った変数には空文字列が設定されます。
-r オプションが指定された場合を除き、バックスラッシュは特別に扱わ
れます。バックスラッシュ文字が改行文字の直前にある場合、バックス
ラッシュ文字と改行文字は削除されます。その他の文字の直前にバック
スラッシュがある場合、バックスラッシュは削除され、文字が IFS に含
まれていても、 IFS の文字でないかのように扱われます。
-t オプションが指定され、かつ入力がなされる前に timeout が経過す
ると、 read コマンドは値を割当てずに戻ります。 timeout 値の後には
オプションで ``s'', ``m'', ``h'' のいずれかの一文字を付けることが
出来、それぞれ秒・分・時間を陽に指定します。どれも指定しない場合
には ``s'' であるものとします。
-e オプションは、古いスクリプトとの後方互換性のためだけにありま
す。
readonly [-p] [name ...]
で指定された変数を読み出し専用とし、あとで値を変更したり unset し
たりすることができないようにします。以下のように記述することで、
変数を読み出し専用と宣言するのと同時に値を設定することも可能で
す。
readonly name=value
引数が指定されない場合、 readonly コマンドは、読み出し専用になっ
ている変数の名前の一覧を表示します。 -p オプションが指定された場
合、読み出し専用になっている変数を、一行毎に ``readonly
name=value'' の形式で表示します。これはシェルに再入力するのに適し
ています。
set [-/+abCEefIimnpTuVvx] [-/+o longname] [-c string] [-- arg ...]
set コマンドは 3 通りの異なった機能を持ちます。
引数を指定しなかった場合、短かい形式でも長い ``-/+o longname'' と
いう形式であっても、 引数リストの処理の節で説明されているように、
指定されたオプションの設定またはクリアを行います。
``--'' オプションが指定された場合、 set はシェルの位置パラメータ
を、引き続く引数で置き換えます。 ``--'' オプションの後に引数が続
かない場合、すべての位置パラメータはクリアされ、 ``shift $#'' コ
マンドを実行するのと等価になります。位置置換パラメータとして引数
を指定するとき、 ``--'' フラグは省略可能です。これはお勧めできま
せん。なぜなら、最初の引数はマイナス記号 (-) またはプラス記号 (+)
で開始するかもしれないからです。これらは、 set コマンドが、オプ
ションの有効化または無効化の要求であると解釈してしまいます。
setvar variable value
変数 variable に値 value を代入します。( setvar は、関数内で、パ
ラメータとして渡された名前を持つ変数に値を代入するためのもので
す。一般に、 setvar を使うよりも
variable=value
と書くほうが望ましいといえます。)
shift [n]
位置パラメータを n 回シフトします。 n を指定しない場合 1 回シフト
します。 1 回のシフトにより、$2 の値が $1 に、$3 の値が $2 に代入
されます (以下同様)。また、$# の値は 1 減少します。位置パラメータ
がない場合、shift は何もしません。
trap [action] signal ...
シェルが指定されたシグナル signal を受けとったときに、 action を
解析し実行するように設定します。シグナルはシグナルの名前か番号で
指定します。さらに、シェル終了時に実行する動作を指定するために、
擬似シグナル EXIT を使用可能です。 action は空文字列にしたり、省
略したりすることができます。空文字列の場合、指定されたシグナルは
無視され、省略した場合は、指定したシグナルを受けとったときデフォ
ルトの処理を行います。シェルがサブシェルを起動するとき、trap で指
定された (が無視されていない) シグナルをデフォルトの動作に再設定
します。シェルが起動したときにすでに無視されるように設定されてい
たシグナルに対して trap コマンドを使用しても効果はありません。
type [name ...]
各 name をコマンドとして解釈し、コマンド検索の結果を出力します。
出力される結果は以下のものがあります。シェルのキーワード、エイリ
アス、シェルの組み込みコマンド、コマンド、痕跡つきエイリアス
(tracked alias)、最後に not found (見つからず) があります。エイリ
アスについては、エイリアス展開の結果が出力されます。コマンドと痕
跡つきエイリアスについては、そのコマンドの完全なパス名が印刷され
ます。
ulimit [-HSabcdflmnstuv] [limit]
リソースのリミット値 (リミット値については getrlimit(2) 参照) を
設定あるいは表示します。 limit が指定されている場合、指定されたリ
ソースが設定されます。それ以外の場合、現在のリソース設定値が表示
されます。
-H が指定された場合、ハードリミットが設定ないし表示されます。ハー
ドリミット値を下げることは誰にでもできますが、それを増やすことが
できるのはスーパユーザだけです。オプション -S を指定した場合はソ
フトリミットになります。リミット値を表示する場合、 -S か -H のい
ずれか一方だけしか指定できません。デフォルトでは、表示はソフトリ
ミット、設定はハード/ソフトリミット両方です。
オプション -a を指定すると ulimit コマンドは全リソースの設定値を
表示します。この場合、パラメータ limit は指定できません。
この他のオプションは、表示あるいは設定するリソースの種類を指定す
るものです。これらは互いに排他的です。
-b sbsize
ソケットバッファサイズの最大値。バイト単位。
-c coredumpsize
コアダンプファイルの最大サイズ。512 バイトのブロック単
位。
-d datasize
プロセスのデータセグメントの最大サイズ。キロバイト単位。
-f filesize
ファイルの最大サイズ。512 バイトブロック単位。
-l lockedmem
プロセスがロックできるメモリサイズの最大値。キロバイト単
位。
-m memoryuse
プロセスの常駐セットサイズの最大値。キロバイト単位。
-n nofiles
あるプロセスがオープンできるファイル記述子の最大数。
-s stacksize
スタックセグメントサイズの最大値。キロバイト単位。
-t time
各プロセスで消費できる CPU 時間の最大値。秒単位。
-u userproc
このユーザ ID で同時に走らせうる最大プロセス数。
-v virtualmem
1 個のプロセスの最大プロセスサイズ。キロバイト単位。
umask [mask]
ファイル作成マスクの値 ( umask(2) を参照) を、 mask で指定された
8 進数の値に設定します。引数が省略された場合、現在のマスクの値が
表示されます。
unalias [-a] [name]
name が指定された場合、指定された名前のエイリアスを削除します。
-a オプションが指定された場合、すべてのエイリアスを削除します。
unset [-fv] name ...
指定された変数または関数を unset し、エクスポートされていない状態
にします。 -v オプションが指定されるか、オプションが何も指定され
なかった場合、 name 引数は変数名として扱われます。 -f オプション
が指定された場合、 name 引数は関数名として扱われます。
wait [job]
指定されたジョブ job が終了するのを待ち、ジョブ内の最後のプロセス
の終了ステータスを返します。引数が省略された場合、すべてのジョブ
が終了するまで待ち、終了ステータス 0 を返します。
コマンド行編集
sh が端末から対話的に実行されている場合、現在入力中のコマンドおよびコマン
ド履歴 ( 組み込みコマンドの fc 参照) を vi モードのコマンド行編集機能によ
り編集することができます。このモードでは、vi のマニュアルに示されているコ
マンドのサブセットを用います。コマンド ``set -o vi'' (または ``set -V'')
により vi モードが有効になり、 sh は vi の挿入モードに移行します。 vi
モード中では、挿入モードとコマンドモードの両方を自由に切り替えることが可
能です。 vi モードは vi と同様であり、 <ESC> キーによりコマンドモードに移
行し、コマンドモードで <return> キーを叩くことで、行の内容がシェルに渡さ
れます。
同様に、コマンド ``set -o emacs'' により emacs 風のコマンド行編集機能のサ
ブセットを使うことができるようになります。
関連項目
builtin(1), echo(1), expr(1), pwd(1), test(1)
歴史
sh コマンドは、 Version 1 AT&T UNIX で登場しました。
FreeBSD 4.9 April 12, 2003 FreeBSD 4.9