Set 組込みコマンド

Set 組込みコマンドはシェルのオプションの設定と位置パラメータの変更を行います。

構文

説明

コマンドライン引数を一切与えずに set コマンドを実行すると、現在シェルに設定されている全ての変数の一覧をアルファベット順で (コマンドとして解釈可能な形式で) 標準出力に出力します。-o を唯一のコマンドライン引数として与えた場合は現在のシェルのオプション設定を一覧にして標準出力に出力します。+o を唯一のコマンドライン引数として与えた場合も同様ですが、この場合はコマンドとして解釈可能な形式で出力します。これ以外の場合は、set コマンドは以下のようにシェルのオプションの設定と位置パラメータの変更のどちらかまたは両方の動作を行います。

オプション

オプションが一つ以上与えられている場合、set コマンドはそれらの有効・無効を切り替えます。通常の形式でオプションを与えると、そのオプションは有効になります。一文字のオプションについて、先頭のハイフン (-) の代わりにプラス (+) を付けて指定すると、そのオプションは無効になります。例えば -m--monitor はシェルのジョブ制御を有効にし、逆に +m+o monitor はジョブ制御を無効にします。(長いオプションの先頭にはプラスは使えません)

以下にオプションの一覧を示します。特に明記しない限り、yash ではこれらのオプションはシェルの起動時にはすべて無効になっています。ただし起動時にコマンドライン引数で指定されたオプションはその時から有効になります。

-a, -o allexport, --allexport
このオプションが有効な時、変数に代入をするとその変数は自動的にエクスポート対象になります。
-o braceexpand, --braceexpand
このオプションはブレース展開を有効にします。
-o curasync, --curasync
-o curbg, --curbg
-o curstop, --curstop
これらのオプションは現在のジョブの選択の仕方に影響します。(ジョブ ID 参照)。これらのオプションはシェルの起動時に最初から有効になっています。
-o dotglob, --dotglob
このオプションが有効な時、パス名展開においてファイル名の先頭のピリオドを特別に扱いません。
-o emacs, --emacs
このオプションは emacs 風行編集を有効にします。
-e, -o errexit, --errexit
このオプションが有効な時、実行した単純コマンド (またはパイプライン) の終了ステータスが 0 でなければ、シェルは直ちに終了します。ただし、そのコマンドが while/until 文のループ条件の判定に使われる場合や if 文の分岐の判定に使われる場合やパイプラインの先頭に ! が付いている場合を除きます。
-o extendedglob, --extendedglob
このオプションはパス名展開における拡張機能を有効にします。
-h, -o hashondef, --hashondef
このオプションが有効なとき関数を定義するとその関数内で使われる各コマンドの PATH 検索を行います。
-o histspace, --histspace
このオプションが有効な時は空白で始まる行はコマンド履歴に自動的に追加しません。
-o ignoreeof, --ignoreeof
このオプションが有効な時、対話モードのシェルに EOF (入力の終わり) が入力されてもシェルはそれを無視してコマンドの読み込みを続けます。これにより、誤って Ctrl-D を押してしまってもシェルは終了しなくなります。
-o le-convmeta, --le-convmeta
-o le-noconvmeta, --le-noconvmeta
-o le-promptsp, --le-promptsp
これらのオプションは行編集の動作に影響します。
-o markdirs, --markdirs
このオプションが有効な時、パス名展開の展開結果においてディレクトリを表すものの末尾にスラッシュを付けます。
-m, -o monitor, --monitor
このオプションはジョブ制御を有効にします。シェルを対話モードで起動したときこのオプションは自動的に有効になります。
-o nocaseglob, --nocaseglob
このオプションが有効な時、パス名展開におけるパターンマッチングは大文字と小文字を区別せずに行います。
-C, -o noclobber, --noclobber
このオプションを有効にすると、> 演算子によるリダイレクトで既存のファイルを上書きすることはできなくなります。
-n, -o noexec, --noexec
このオプションが有効な時、シェルはコマンドの解釈だけを行い、実際にはコマンドを実行しません。このオプションはシェルスクリプトの文法チェックをするのに便利です。
-f, -o noglob, --noglob
このオプションが有効なときはシェルはパス名展開を行いません。
-b, -o notify, --notify
このオプションが有効な時は、バックグラウンドのジョブの実行状態が変化するとシェルは直ちにそれを標準エラーに報告します。
このオプションは -o notifyle オプションより優先します。
-o notifyle, --notifyle
このオプションは -o notify オプションとほぼ同じですが、行編集を行っている最中のみジョブの状態変化を報告します。
-u, -o nounset, --nounset
このオプションが有効な時、パラメータ展開で存在しない変数を展開しようとすると展開エラーになります。
-o nullglob, --nullglob
このオプションが有効な時、パス名展開でマッチするパス名がないとき元のパターンは残りません。
-o posix, --posix
このオプションは POSIX 準拠モードを有効にします。
-v, -o verbose, --verbose
このオプションが有効な時、シェルは読み込んだコマンドをそのまま標準エラーに出力します。
-o vi, --vi
このオプションは vi 風行編集を有効にします。対話モードが有効で標準入力と標準エラーがともに端末ならばこのオプションはシェルの起動時に自動的に有効になります。
-x, -o xtrace, --xtrace
このオプションが有効な時、コマンドを実行する前に展開の結果を標準エラーに出力します。この出力は、各行頭に PS4 変数の値を展開した結果を付けて示されます。

Set コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペランドとして解釈します。

オペランド

Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二つ (--, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の位置パラメータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。

終了ステータス

オプションの指定が間違っている場合を除き、set コマンドの終了ステータスは 0 です。

補足

Set コマンドは特殊組込みコマンドです。

ここに挙げたオプションのうち POSIX に規定されているのは以下のものだけです。

POSIX ではこのほかに、関数定義コマンド履歴に登録しないようにする -o nolog オプションを規定していますが、yash はこれをサポートしていません。