名前
yash - POSIX 準拠コマンドラインシェル概要
yash [オプション...] [--] [オペランド...]はじめに
Yet another shell (yash) は Unix 系 OS 用コマンドラインシェルです。POSIX.1-2008 規格に (一部の例外を除いて) 準拠しています。POSIX 準拠を謳う他のシェルよりも精確な準拠を目指しています。また、コマンド履歴やコマンドライン編集など、対話シェルとして標準的な機能も備えています。シェルの起動
Yash がプログラムとして起動されると、yash はいくつかの初期化処理を行った後、コマンドを読み取って実行する処理に移ります。これらの処理の内容は、主に起動時のコマンドライン引数によって決まります。起動時のコマンドライン引数
Yash の起動時のコマンドライン引数は POSIX に準拠しています。POSIX で定められているとおり、引数は オプション と オペランド に分類されます。引数の書式に関する一般的な説明についてはコマンドの引数の構文を参照してください。オプションはオペランドより前に指定する必要があります。シェルの初期化処理
シェルの初期化処理は以下のように行われます。 1.Yash
はまず、(コマンドライン引数の前に渡される)
それ自身の起動時の名前を解析します。その名前が
-
で始まる場合は、シェルはログインシェルとして動作します。また名前が
sh である場合 ( /bin/sh
のように sh
で終わる場合を含む)
は、シェルは POSIX
準拠モードになります。
2.オペランドが一つもなく、かつ標準入力と標準エラーがどちらも端末ならば、シェルは自動的に対話モードになります。ただし
+i ( ++interactive)
オプションが指定されている場合はそちらを優先します。
3.対話モードのシェルでは自動的にジョブ制御が有効になります。ただし
+m ( ++monitor)
オプションが指定されている場合はそちらを優先します。
4.シェルは以下の初期化スクリプトを読み込んで解釈・実行します。(ただしシェルプロセスの実ユーザ
ID と実効ユーザ ID
が異なっているか、実グループ
ID と実効グループ ID
が異なっている場合を除く)
1.シェルがログインシェルとして動作している場合は、
--profile=ファイル名
オプションで指定したファイルを読み込んで実行します。(ただし
--noprofile
オプションが指定されているか
POSIX
準拠モードの場合を除く)
--profile=ファイル名
オプションが指定されていない場合は、~/.yash_profile
がデフォルトのファイルとして使われます。
2.シェルが対話モードの場合は、
--rcfile=ファイル名
オプションで指定したファイルを読み込んで実行します。(ただし
--norcfile
オプションが指定されている場合を除く)
--rcfile
オプションが指定されていない場合は、非
POSIX
準拠モードではファイル
~/.yashrc
がデフォルトのファイルとして使われます。~/.yashrc
が読み込めない場合は、ファイル
initialization/default を YASH_LOADPATH
から探して読み込みます。POSIX
準拠モードでは、 ENV
環境変数の値がパラメータ展開され、その結果をファイル名と見なしてファイルを読み込みます。
コマンドの文法
シェルはコマンドを一行ずつ読み込んで解釈し、実行します。一行に複数のコマンドがある場合は、それら全てを解釈してから実行します。一つのコマンドが複数行にまたがっている場合は、そのコマンドを解釈し終えるのに必要なだけ後続の行が読み込まれます。コマンドを正しく解釈できない場合は、文法エラーとなり、コマンドは実行されません。トークンの解析と予約語
コマンドは、いくつかのトークンによって構成されます。 トークンとは、シェルの文法における一つ一つの単語のことを言います。トークンは原則として空白 (空白文字またはタブ文字) によって区切られます。ただしコマンド置換などに含まれる空白はトークンの区切りとは見なしません。; & | < > ( ) [newline]
$ ` \ " ' * ? [ # ~ = %
! { } [[ case do done elif else esac fi for function if in then until while
•それがコマンドの最初のトークンのとき
•それが他の予約語
( case, for, in を除く)
の直後のトークンのとき
•それがコマンドの最初のトークンではないが、複合コマンドの中で予約語として扱われるべきトークンであるとき
クォート
空白や上記の区切り記号・予約語などを通常の文字と同じように扱うには、適切な引用符でクォートする必要があります。引用符は、それ自体をクォートしない限り通常の文字としては扱われません。シェルでは以下の三種類の引用符が使えます。•バックスラッシュ
( \)
は直後の一文字をクォートします。
例外として、バックスラッシュの直後に改行がある場合、それは改行をクォートしているのではなく、
行の連結と見なされます。バックスラッシュと改行が削除され、バックスラッシュがあった行とその次の行が元々一つの行であったかのように扱われます。
•二つの一重引用符
( ')
で囲んだ部分では、全ての文字は通常の文字と同じように扱われます。改行を一重引用符で囲むこともできます。ただし、一重引用符を一重引用符で囲むことはできません。
•二つの二重引用符
( ")
で囲んだ部分も一重引用符で囲んだ部分と同様にクォートされますが、いくつか例外があります。二重引用符で囲んだ部分では、パラメータ展開・コマンド置換・数式展開が通常通り解釈されます。またバックスラッシュは
$, `, ", \
の直前にある場合および行の連結を行う場合にのみ引用符として扱われ、それ以外のバックスラッシュは通常の文字と同様に扱われます。
エイリアス
コマンドを構成する各トークンは、それが予め登録されたエイリアスの名前に一致するかどうか調べられます。一致するものがあれば、そのトークンはそのエイリアスの内容に置き換えられて、その後コマンドの解析が続けられます。これを エイリアス置換といいます。単純コマンド
最初のトークンが予約語でないコマンドは、 単純コマンドです。単純コマンドは単純コマンドの実行のしかたに従って実行されます。パイプライン
パイプラインは、一つ以上のコマンド (単純コマンド、複合コマンド、または関数定義) を記号 | で繋いだものです。And/or リスト
And/or リストは一つ以上のパイプラインを記号 && または || で繋いだものです。•二つのパイプラインが
&&
で繋がれている場合、前のパイプラインの終了ステータスが
0
ならば後のパイプラインが実行されます。
•二つのパイプラインが
||
で繋がれている場合、前のパイプラインの終了ステータスが
0
でなければ後のパイプラインが実行されます。
•それ以外の場合は、and/or
リストの実行はそこで終了し、それ以降のパイプラインは実行されません。
コマンドの区切りと非同期コマンド
シェルが受け取るコマンドの全体は、and/or リストを ; または & で区切ったものです。行末、 ;; または ) の直前にある ; は省略できますが、それ以外の場合は and/or リストの直後には必ず ; と & のどちらかが必要です。複合コマンド
複合コマンドは、より複雑なプログラムの制御を行う手段を提供します。
{
コマンド ...; }
サブシェルのグルーピングの構文
(コマンド...)
if
条件コマンド ...;
then
内容コマンド...;
fi
Else がある場合
if
条件コマンド ...;
then
内容コマンド...; else
内容コマンド...;
fi
Elif がある場合
if
条件コマンド ...;
then
内容コマンド...; elif
条件コマンド...;
then
内容コマンド...;
fi
Elif と else がある場合
if
条件コマンド ...;
then
内容コマンド...; elif
条件コマンド...;
then
内容コマンド...; else
内容コマンド...;
fi
while
条件コマンド ...; do
内容コマンド...;
done
Until ループの構文
until
条件コマンド ...; do
内容コマンド...;
done
for
変数名 in
単語 ...; do
コマンド ...; done
for 変数名 do
コマンド ...; done
1.単語を変数名で指定した変数に代入する
2.コマンドを実行する
case 単語
in caseitem... esac
Caseitem の構文
(パターン)
コマンド...;;
1.パターントークンを
単語と同様に展開し、展開したパターンが展開した単語にマッチするかどうか調べます
(パターンマッチング記法参照)。
パターンとして指定されたトークンが複数ある場合はそれら各トークンに対してマッチするかどうか調べます
(どれかのパターントークンがマッチしたらそれ以降のパターントークンは展開されません。Yash
はトークンが書かれている順番にマッチするかどうかを調べますが、他のシェルもこの順序で調べるとは限りません)。
2.マッチした場合は、直後の
コマンドを実行し、それでこの
case
文の実行は終了です。マッチしなかった場合は、次の
caseitem
の処理に移ります。
[[ 式
]]
-b, -c, -d, -e,
-f, -G, -g, -h, -k, -L, -N,
-n, -O, -o, -p, -r, -S, -s,
-t, -u, -w, -x, -z
二項原子式
-ef, -eq, -ge,
-gt, -le, -lt, -ne, -nt, -ot,
-veq, -vge, -vgt, -vle, -vlt, -vne,
===, !==, =~, <, >
式を括弧で囲むと演算子の優先順位を変更できます。
! 式
感嘆符は式の結果を反転します。
expression && expression
二重アンパサンドは連言
(論理積)
を表します。両辺が共に真である時、全体も真となります。左辺が先に展開・判定されます。左辺が真である場合のみ右辺が展開・判定されます。
expression || expression
二重縦棒は選言
(論理和)
を表します。両辺が共に偽である時、全体も偽となります。左辺が先に展開・判定されます。左辺が偽である場合のみ右辺が展開・判定されます。
関数定義
関数定義コマンドは、関数を定義します。 関数定義コマンドの構文
関数名 ( )
複合コマンド
function 関数名
複合コマンド
function 関数名 ( )
複合コマンド
パラメータと変数
パラメータとは、パラメータ展開で値に置き換えられるデータを言います。パラメータには位置パラメータ・特殊パラメータ・変数の三種類があります。位置パラメータ
位置パラメータは 1 以上の自然数によって識別されるパラメータです。例えば位置パラメータが三つある場合、それらは順に 1, 2, 3 という名称で識別されます。位置パラメータの個数は特殊パラメータ # で取得できます。また全ての位置パラメータを表す特殊パラメータとして * と @ があります。特殊パラメータ
特殊パラメータは一文字の記号によって識別されるパラメータです。特殊パラメータにはユーザが明示的に値を代入することはできません。このパラメータの値は、シェルの起動時に与えられたシェルの実行ファイルの名称またはスクリプトファイルの名称です。(起動時のコマンドライン引数参照)
#
このパラメータの値は、現在の位置パラメータの個数を表す
0 以上の整数です。
$
このパラメータの値は、シェル自身のプロセス
ID
を表す正の整数です。この値はサブシェルにおいても変わりません。
-
このパラメータの値は、現在シェルで有効になっているオプションの文字をつなげたものです。この値には、シェルの起動時にコマンドライン引数で指定できる一文字のオプションのうち現在有効になっているものが全て含まれます。Set
組込みコマンドでオプションを変更した場合は、その変更がこのパラメータの値にも反映されます。
?
このパラメータの値は、最後に終了したパイプラインの終了ステータスを表す
0 以上の整数です。
!
このパラメータの値は、最後に実行した非同期コマンドのプロセス
ID です。
*
このパラメータの値は、現在の位置パラメータの値です。位置パラメータが一つもない場合、このパラメータの値は空文字列です。位置パラメータが複数ある場合、このパラメータの値は全ての位置パラメータの値を連結したものです。各位置パラメータの値の間は以下に従って区切られます。
このパラメータの展開結果に対して単語分割が行われる場合、値はまず元の位置パラメータに一致するように分割されさらに変数
IFS
の値に従って分割されます。この最初の分割は
IFS
が空文字列でも行います。
@
•変数 IFS
が存在し、その値が空でない場合、各位置パラメータは変数
IFS
の値の最初の文字で区切られます。
•変数 IFS
が存在し、その値が空の場合、各位置パラメータは間に何も置かずに連結されます。
•変数 IFS
が存在しない場合、各位置パラメータは空白文字で区切られます。
このパラメータは、パラメータ
*
と同様に現在の全ての位置パラメータを表します。ただし、このパラメータが二重引用符によるクォートの中で展開される場合の扱いがパラメータ
*
と異なります。この場合、結果は各位置パラメータに正確に一致するように単語分割されます。また位置パラメータが一つもない場合、このパラメータは展開後の単語には残りません。(よって、引用符の中であるにもかかわらず、展開結果は一つの単語になるとは限りません。)
例えば位置パラメータが一つもないとき、コマンドライン
echo 1 "$@" 2 は
echo、1、2
という三つの単語に展開されます。位置パラメータが
1、2 2、3
の三つのとき、コマンドライン
echo "$@" は echo、1、2
2、 3
という四つの単語に展開され、コマンドライン
echo "a$@b" は echo、a1、2
2、 3b
という四つの単語に展開されます。
変数
変数とはユーザが自由に代入可能なパラメータです。各変数は名前で区別され、それぞれが文字列の値を持ちます。この変数は cd
組込みコマンドで移動先ディレクトリを検索するために使われます。
COLUMNS
この変数は端末ウィンドウの横幅
(文字数)
を指定します。この変数が設定されている場合、デフォルトの横幅ではなくこの変数の値で指定された横幅が行編集で使われます。
COMMAND_NOT_FOUND_HANDLER
シェルが実行しようとしたコマンドが見つからなかったとき、この変数の値がコマンドとして実行されます。不明なコマンドを実行したときに何か別のコマンドを実行させたい時に便利です。単純コマンドの実行を参照。
この機能は POSIX
準拠モードでは働きません。
DIRSTACK
この配列変数はディレクトリスタックの実装に使われています。pushd
組込みコマンドでディレクトリを移動したとき、前のディレクトリを覚えておくためにそのパス名がこの配列に入れられます。この配列の内容を変更することは、ディレクトリスタックの内容を直接変更することになります。
ECHO_STYLE
この変数は echo
組込みコマンドの挙動を指定します。
ENV
POSIX
準拠モードで対話モードのシェルが起動されたとき、この変数の値で示されるパスのファイルが初期化スクリプトとして読み込まれます
(シェルの初期化処理参照)。
FCEDIT
Fc
組込みコマンドでコマンドを編集する際、この変数の値で示されたエディタがコマンドの編集に使われます。
HANDLED
この変数は
COMMAND_NOT_FOUND_HANDLER
変数の値が実行された後に、コマンドが見つからなかったことをエラーとするかどうかを指示します。単純コマンドの実行を参照。
HISTFILE
コマンド履歴を保存するファイルのパスを指定します。
HISTRMDUP
コマンド履歴の重複をチェックする個数を指定します。履歴にコマンドを追加する際、既に履歴にあるコマンドのうちここで指定した個数のコマンドが新しく追加されるコマンドと同じかどうかをチェックします。同じコマンドが既に履歴にあれば、それは履歴から削除されます。
例えばこの変数の値が
1
のときは、履歴に追加されるコマンドが一つ前のコマンドと同じならばそれは削除されます。それより古い履歴のコマンドは、(履歴に追加されるコマンドと同じでも)
削除されません。もしこの変数の値が
HISTSIZE
変数の値と同じなら、履歴の中で重複するコマンドはすべて削除されます。あるいはもしこの変数の値が
0
なら、重複する履歴は一切削除されません。
HISTSIZE
コマンド履歴に保存される履歴項目の個数を指定します。
HOME
ユーザのホームディレクトリのパスを指定します。チルダ展開や
cd
組込みコマンドの動作に影響します。
IFS
この変数は単語分割の区切りを指定します。シェルの起動時にこの変数の値は空白文字・タブ・改行の三文字に初期化されます。
LANG, LC_ALL, LC_COLLATE, LC_CTYPE,
LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME
これらの変数はシェルが動作するロケールを指定します。シェルが読み書きするファイルのエンコーディングやエラーメッセージの内容などはこの変数で指定されたロケールに従います。
LC_CTYPE
変数の値はシェルの起動時にのみ反映されます。シェルの実行中にこの変数を変更してもシェルのロケールは変わりません
(シェルが非 POSIX
準拠モードで対話モードの場合を除く)。
LINENO
この変数の値は、現在シェルが読み込んで実行しているファイルにおける、現在実行中のコマンドのある行番号を示します。(対話モードでは、コマンドを入力して実行するたびに行番号は
1 に戻ります)
一度この変数に代入したり変数を削除したりすると、この変数を用いて行番号を取得することはできなくなります。
LINES
この変数は端末ウィンドウの行数を指定します。この変数が設定されている場合、デフォルトの行数ではなくこの変数の値で指定された行数が行編集で使われます。
MAIL
この変数はメールチェックの対象となるファイルのパスを指定します。
MAILCHECK
この変数はメールチェックを行う間隔を秒単位で指定します。この変数の値はシェルの起動時に
600
に初期化されます。
MAILPATH
この変数はメールチェックの対象となるファイルのパスを指定します。
NLSPATH
POSIX
によるとこの変数の値はロケール依存のメッセージデータファイルのパスを指示することになっていますが、yash
では使用していません。
OLDPWD
Cd
組込みコマンドなどで作業ディレクトリを変更したときに、変更前の作業ディレクトリパスがこの変数に設定されます。この変数はデフォルトでエクスポート対象になります。
OPTARG
Getopts
組込みコマンドで引数付きのオプションを読み込んだとき、その引数の値がこの変数に設定されます。
OPTIND
この変数の値は、getopts
組込みコマンドで次に読み込むオプションのインデックスを表します。シェルの起動時にこの変数は
1
に初期化されます。
PATH
この変数は、コマンドの検索時にコマンドのありかを示すパスを指定します。
PPID
この変数の値は、シェルの親プロセスのプロセス
ID
を表す正の整数です。この変数はシェルの起動時に初期化されます。この変数の値はサブシェルにおいても変わりません。
PROMPT_COMMAND
POSIX
準拠モードでない対話モードのシェルにおいて、シェルが各コマンドのプロンプトを出す直前に、この変数の値がコマンドとして解釈・実行されます。これは、プロンプトを出す直前に毎回
eval -i -- "${PROMPT_COMMAND-}"
というコマンドが実行されるのと同じですが、このコマンドの実行結果は次のコマンドでの
?
特殊パラメータの値には影響しません。
PS1
この変数の値は、対話モードのシェルが出力する標準のコマンドプロンプトを指定します。この値の書式についてはプロンプトの項を参照してください。
この変数はシェルの起動時に実効ユーザ
ID が 0 かどうかによって
$ と #
のどちらかに初期化されます。
PS1R
この変数の値は、対話モードのシェルがコマンドを読み込む際に、入力されるコマンドの右側に表示されるプロンプトを指定します。この値の書式についてはプロンプトの項を参照してください。
PS1S
この変数の値は、対話モードのシェルがコマンドを読み込む際に、入力されるコマンドを表示するフォントの書式を指定します。この値の書式についてはプロンプトの項を参照してください。
PS2
この変数の値は、対話モードのシェルが出力する補助的なコマンドプロンプトを指定します。この値の書式についてはプロンプトの項を参照してください。
この変数はシェルの起動時に
>
に初期化されます。
PS2R
この変数は
PS1R
変数と同様ですが、プロンプトとして
PS1 変数ではなく PS2
変数の値が使用されるときに使用されます。
PS2S
この変数は
PS1S
変数と同様ですが、プロンプトとして
PS1 変数ではなく PS2
変数の値が使用されるときに使用されます。
PS4
Xtrace
オプションが有効なとき、この変数の値が各トレース出力の前に出力されます。ただし出力の前にこの変数の値に対してパラメータ展開、コマンド置換、数式展開を行います。また
POSIX
準拠モードでなければ、
PS1
変数と同様に、バックスラッシュで始まる特殊な記法が利用できます。
この変数はシェルの起動時に
+
に初期化されます。
PS4S
この変数は
PS1S
変数と同様ですが、プロンプトとして
PS1
変数が使用されるときではなく、トレース出力の際に
PS4
変数の値が使用されるときに使用されます。この変数を使うとトレース出力のフォントの書式を変更することができます。
PWD
この変数の値は現在の作業ディレクトリの絶対パスを表します。この変数はシェルの起動時に正しいパスに初期化され、cd
組込みコマンドなどで作業ディレクトリを変更する度に再設定されます。この変数はデフォルトでエクスポート対象になります。
RANDOM
この変数は乱数を取得するために使用できます。この変数の値は
0 以上 32768
未満の一様分布乱数になっています。
この変数に非負整数を代入すると乱数を生成する
種を再設定できます。
一度この変数を削除すると、この変数を用いて乱数を取得することはできなくなります。またシェルが
POSIX
準拠モードで起動された場合、この変数で乱数を取得することはできません。
TERM
この変数は対話モードのシェルが動作している端末の種類を指定します。ここで指定された端末の種類に従って行編集機能は端末を制御します。この変数の効力を得るためには変数がエクスポートされている必要があります。
YASH_AFTER_CD
この変数の値は、cd
組込みコマンドや pushd
組込みコマンドで作業ディレクトリが変更された後にコマンドとして解釈・実行されます。これは、作業ディレクトリが変わった後に毎回
eval -i -- "${YASH_AFTER_CD-}"
というコマンドが実行されるのと同じです。
YASH_LOADPATH
ドット組込みコマンドで読み込むスクリプトファイルのあるディレクトリを指定します。PATH
変数と同様に、コロンで区切って複数のディレクトリを指定できます。この変数はシェルの起動時に、yash
に付属している共通スクリプトのあるディレクトリ名に初期化されます。
YASH_LE_TIMEOUT
この変数は行編集機能で曖昧な文字シーケンスが入力されたときに、入力文字を確定させるためにシェルが待つ時間をミリ秒単位で指定します。行編集を行う際にこの変数が存在しなければ、デフォルトとして
100
ミリ秒が指定されます。
YASH_PS1, YASH_PS1R, YASH_PS1S, YASH_PS2,
YASH_PS2R, YASH_PS2S, YASH_PS4, YASH_PS4S
POSIX
準拠モードではないとき、これらの変数は名前に
YASH_ が付かない PS1
等の変数の代わりに優先して使われます。POSIX
準拠モードではこれらの変数は無視されます。プロンプトで
yash
固有の記法を使用する場合はこれらの変数を使用すると
POSIX 準拠モードで yash
固有の記法が解釈されずに表示が乱れるのを避けることができます。
YASH_VERSION
この変数はシェルの起動時にシェルのバージョン番号に初期化されます。
単語の展開
コマンドを構成する各単語は、そのコマンドが実行されるときに展開されます。 展開とは単語に含まれるパラメータやパターンを処理して具体的な文字列値に置き換えることです。展開には以下の七種類があります。
1.チルダ展開
2.パラメータ展開
3.コマンド置換
4.数式展開
5.ブレース展開
6.単語分割
7.パス名展開
チルダ展開
チルダ展開は、~ で始まる単語を特定のパス名に置き換える展開です。単語の先頭にある ~ から最初の / まで (/ がない場合は単語全体) が指定されたパス名に変換されます。ただし、置き換えられる部分が一文字でもクォートされている場合は、チルダ展開は行われません。単なる ~
は、 HOME
変数の値に置き換えられます。
~ユーザ名
~
の後にユーザ名が書かれている場合は、そのユーザのホームディレクトリのパス名に置き換えられます。
~+
~+ は、 PWD
変数の値に置き換えられます。
~-
~- は、 OLDPWD
変数の値に置き換えられます。
~+n, ~-n
この n は 0
以上の整数でなければなりません。この形式のチルダ展開は、+
n または - n
で指定されるディレクトリスタック内のパスの一つに展開されます。(dirs
組込みコマンド参照)
VAR=~/a:~/b:~/c
VAR=/home/foo/a:/home/foo/b:/home/foo/c
パラメータ展開
パラメータ展開は、単語の一部をパラメータの値に置き換える展開です。•パラメータ名が特殊パラメータの場合
•パラメータ名が一桁の位置パラメータの場合
•パラメータ名が変数名で、直後に変数名の一部として誤解される恐れのある文字がない場合。例えば
${path}-name という単語は
$path-name
と書くこともできますが、
${path}name を $pathname
と書くことはできません。
${
前置詞
パラメータ名
インデックス
加工指定 }
[単語1]
[単語1,単語2]
1.まず、インデックスに含まれる
単語1・単語2に対してパラメータ展開・コマンド置換・数式展開を行います。
2.インデックスが
[ 単語1]
の書式をしていて、
単語1の上記展開結果が
*、@、#
のいずれかの場合は、インデックスの解釈は終了です。
3.単語1と単語2の上記展開結果を数式とみなして、数式展開と同様に計算します。計算の結果得られる整数がインデックスとなります。数式展開の結果が整数でない場合は展開エラーです。
単語2がない形式でインデックスを指定している場合は、単語2は単語1と同じ整数を指定しているものとみなされます。
•インデックスの整数が負数のときは、要素または文字を最後から数えるものとみなされます。例えばインデックス
[-2,-1]
は配列の最後の二つの要素
(またはパラメータの値の最後の
2 文字)
を選択します。
•インデックスの整数が存在しない要素または文字を指示している場合でも、エラーにはなりません。例えば配列の要素数が
4
のときにインデックス
[3,5]
が与えられたときは 3
番目以降の全ての要素が選択され、インデックス
[5,7]
が与えられた時はどの要素も選択されません。
•インデックスの整数の一方が
0
ならば、(もう一方が何であれ)
展開結果には何も残りません。
パラメータ名が配列変数の場合、特殊パラメータ
*
と同様に配列の全要素を単語分割または連結します。
パラメータ名が特殊パラメータ
* または @
の場合、同様に位置パラメータを単語分割・連結します。それ以外の場合はインデックス
[1,-1] と同様です。
@
インデックス
[1,-1] と同様です。
#
パラメータ名が配列変数の場合、このパラメータ展開は配列の要素数を表す整数に展開されます。パラメータ名が特殊パラメータ
* または @
の場合、このパラメータ展開は位置パラメータの個数を表す整数に展開されます。それ以外の場合、このパラメータ展開はいま展開しようとしている値の文字数を表す整数に展開されます。
var='123ABC789' echo "${var[4,6]}"
set 1 2 3 4 5 echo "${*[2,-2]}"
array=(1 2 3 4 5) echo "${array[2,-2]}"
パラメータ名が存在しない変数を指示している場合は、このパラメータ展開は単語に展開されます。(Unset
オプションが無効な時でもエラーになりません)
+単語
パラメータ名が存在する変数を指示している場合は、このパラメータ展開は単語に展開されます。(Unset
オプションが無効な時でもエラーになりません)
=単語
パラメータ名が存在しない変数を指示している場合は、単語の展開結果がその変数に代入された後、このパラメータ展開はその値に展開されます。変数以外のものに対して代入しようとすると展開エラーになります。(Unset
オプションが無効な時でもエラーになりません)
?単語
パラメータ名が存在しない変数を指示している場合は、エラーメッセージとして単語を標準エラーに出力します。(単語がない場合はデフォルトのエラーメッセージが出ます)
:-単語,
:+単語,
:=単語,
:?単語
これらは上記の
-、+、=、? と
単語の組み合わせの加工指定と同様ですが、
単語を使用する条件が異なります。先頭に
:
が付かないものでは
『変数が存在するかどうか』
で判定されますが、
: が付くものでは
『変数が存在し、その値が空文字列でないかどうか』
で判定されます。
#単語
単語をパターンとして見たとき、それがいま展開しようとしている値の先頭部分にマッチするならば、そのマッチする部分を削除します。結果として、このパラメータ展開はマッチしなかった残りの部分に展開されます。マッチの仕方が複数通りある場合はできるだけ短くマッチさせます。
##単語
この加工指定は
#単語
と同様ですが、マッチの仕方が複数通りある場合はできるだけ長くマッチさせる点が異なります。
%単語
この加工指定は
#単語
と同様ですが、値の先頭部分ではなく末尾部分にマッチさせる点が異なります。
%%単語
この加工指定は
%単語
と同様ですが、マッチの仕方が複数通りある場合はできるだけ長くマッチさせる点が異なります。
/単語1/単語2
単語1をパターンとして見たとき、それがいま展開しようとしている値の一部にマッチするならば、そのマッチする部分を単語2に置き換えます。結果として、このパラメータ展開はマッチした部分を単語2に置き換えた値に展開されます。マッチする箇所が複数ある場合は、最初の箇所が選ばれます。マッチの仕方が複数通りある場合はできるだけ長くマッチさせます。
この加工指定は POSIX
準拠モードでは使えません。
/#単語1/単語2
この加工指定は
/単語1/単語2
と同様ですが、いま展開しようとしている値の先頭部分にしかマッチしない点が異なります。
/%単語1/単語2
この加工指定は
/単語1/単語2
と同様ですが、いま展開しようとしている値の末尾部分にしかマッチしない点が異なります。
//単語1/単語2
この加工指定は
/単語1/単語2
と同様ですが、マッチする箇所が複数ある場合は最初の箇所だけではなく全ての箇所を
単語2に置き換える点が異なります。
:/単語1/単語2
この加工指定は
/単語1/単語2
と同様ですが、いま展開しようとしている値全体にマッチする場合しか対象としない点が異なります。
コマンド置換
コマンド置換は、指定されたコマンドを実行してその出力をコマンドラインに展開します。コマンド置換の書式は以下の通りです。 コマンド置換
$(コマンド)
`コマンド`
数式展開
数式展開は、文字列を数式として解釈して、その計算結果を表す数値に展開します。数式展開の書式は以下の通りです。 数式展開
$((式))
1.( )
2.++ --
(後置演算子)
3.++ -- + -
~ ! (前置演算子)
4.* / %
5.+ -
(二項演算子)
6.<< >>
7.< <= >
>=
8.== !=
9.&
10.^
11.|
12.&&
13.||
14.? :
(三項演算子)
15.= *= /= %=
+= -= <<= >>= &= ^=
|=
set +o posixly-correct foo=bar echo $((0 ? foo : foo)) # 「bar」を出力 echo $((foo + 0)) # エラー
ブレース展開
ブレース展開は、ブレース ( { }) で囲んだ部分をいくつかの単語に分割します。ブレース展開は brace-expand オプションが有効な時のみ行われます。ブレース展開には二種類の形式があります。 カンマ区切りのブレース展開
{単語1,単語2,...,単語n}
連続した数値のブレース展開
{始点..終点}
{始点..終点..差分}
単語分割
単語分割は、展開の結果をいくつかの単語に分割します。
1.分割は、分割の対象となる展開結果の部分の中で、IFS
文字が現れる箇所で行われます。以下このような箇所を
分割点と呼びます。複数の
IFS
文字が連続して現れる場合は、それらをまとめて一つの分割点とします。
2.分割点に IFS
非空白類が含まれている場合、その分割点に含まれる
IFS
空白類はすべて無視されます。そして分割点に含まれる各
IFS
非空白類の前後で単語が分割されます。
3.分割点に IFS
非空白類が含まれていない
(分割点が IFS
空白類だけからなる)
場合、その分割点の前後で単語が分割されます。ただし、このような分割点が元の単語の先頭または末尾にある場合を除きます。
4.いずれの場合も、分割点は単語分割後の単語には残りません。
•empty-last-field
オプションが無効
•分割結果が複数の単語である
•最後の単語が空文字列である
パス名展開
パス名展開は、単語をパターンとみなしてファイルを検索し、パターンにマッチする実在のファイルへのパス名に展開します。 パス名展開は glob オプションが無効な時は行われません。マッチするファイルがない時、通常
(このオプションが無効な時)
はパターンはそのまま残りますが、このオプションが有効な時はパターンは削除され何も残りません。
case-glob
通常
(このオプションが有効な時)
は、大文字と小文字を区別してマッチングを行いますが、このオプションが無効な時は大文字と小文字を区別せずマッチングを行います。
dot-glob
通常
(このオプションが無効な時)
は、 * や ?
などのワイルドカードやブラケット記法で始まるパターンはピリオドで始まるファイル名にマッチしません。しかしこのオプションが有効な時はこのような制約は解除されます。
mark-dirs
このオプションを有効にすると、マッチしたファイルの種類がディレクトリの場合に展開されるパス名の最後に
/ が付きます。
extended-glob
このオプションを有効にすると、パス名展開における拡張機能
(後述)
が使えるようになります。
指定されたディレクトリツリーに対し再帰的に検索を行います。すなわち、指定されたディレクトリと、そのサブディレクトリ、さらにそのサブディレクトリなどに対し検索を行います。ただし名前がピリオドで始まるディレクトリは検索の対象になりません。例えば
dir/**/file
というパターンは、dir/file
や dir/foo/file や dir/a/b/c/file など、dir
ディレクトリの中にある全ての
file
ファイルへのパスに展開されます。
この特殊なパターンは、
foo/bar/**
のようにパターン全体の最後にある場合には効果がありません。
.**
**
パターンと同様ですが、名前がピリオドで始まるディレクトリも含めて検索する点が異なります。
***
**
パターンと同様ですが、検索の中でディレクトリへのシンボリックリンクが見つかった場合、そのディレクトリの中も検索の対象に含める点が異なります。
.***
***
パターンと同様ですが、名前がピリオドで始まるディレクトリも含めて検索する点が異なります。
パターンマッチング記法
パターンマッチング記法は特定の文字列の集合を表すパターンの書式と意味の定義です。ある文字列があるパターンの表す文字列の集合に含まれる時、その文字列はそのパターンにマッチするといいます。文字列がパターンに当てはまるかどうかは、以下に示す定義に従って判定されます。通常の文字
クォートしてある文字および以下に示す特殊な意味を持つ文字以外のすべての文字は、通常の文字として扱われます。パターンに含まれる通常の文字は、その文字自身に当てはまります。一文字ワイルドカード
文字 ? は任意の一文字に当てはまります。複数文字ワイルドカード
文字 * は任意の文字列に当てはまります。ここでいう任意の文字列には空文字列も含まれます。 例えば a*c というパターンは ac、 abc、a;xyz;c など、a で始まり c で終わる任意の文字列に当てはまります。ブラケット記法
括弧 [ と ] で囲まれた部分は ブラケット記法とみなされます。ただし、括弧の間には少なくとも一文字挟まれている必要があります。括弧の間にある文字は以下に示すブラケット記法のための特殊なパターン ( ブラケット記法パターン) として解釈されます。ブラケット記法は、括弧の間にあるブラケット記法パターンが示す文字のどれか一つに当てはまります。(ブラケット記法パターンにおける) 通常の文字
以下に示す特殊な意味を持つ記号以外の文字はすべて通常の文字として扱われます。通常の文字はその文字自身を表します。範囲指定
二つの文字 (または照合シンボル) をハイフン ( -) でつないだものは 範囲指定とみなされます。範囲指定は、その二つの文字と照合順序上その間にある全ての文字を表します。 照合順序とは文字を辞書順に並べるためにロケールデータに定義される文字の順序関係です。使用中のロケールに定義されている照合順序に従って二つの文字の間にある文字が決まります。照合シンボル
照合シンボルを用いることで複数の文字からなる照合要素を一つの文字として扱うことができます。(照合要素とは複数の文字をまとめて一つの文字として扱うことができるようにするために考えられた、より一般的な文字の概念です。パターンマッチングにおいて全ての文字は実際には照合要素として扱われています。) 照合シンボルは括弧 [. .] の中に照合要素を挟んだものとして表します。括弧内に書ける照合要素は使用中のロケールデータにおいて照合要素として登録されているものに限ります。等価クラス
等価クラスを用いることで、ある文字と 等価であるとみなされる文字を指定することができます。等価クラスは括弧 [= =] の中に文字を挟んだものとして表します。括弧の間には照合シンボルのように複数の文字からなる照合要素を書くこともできます (上記参照)。等価クラスは、括弧で挟んだ文字そのものの他に、その文字と同じ第一等価クラスに属する全ての文字を表します。どの文字が第一等価クラスに属するかの定義は使用中のロケールデータに従います。文字クラス
文字クラスは特定の種類の文字の集合を表します。文字クラスは括弧 [: :] の間に文字クラスの名前を囲んだものとして表します。文字クラスの名前としては、以下に挙げる共通の文字クラスの他に、使用中のロケールで定義された独自の文字クラスが使用できます。いずれの文字クラスの場合も、文字クラスにどの文字が含まれるのかは使用中のロケールにおける文字クラスの定義に従います。 [:lower:]小文字の集合
[:upper:]
大文字の集合
[:alpha:]
アルファベットの集合
( [:lower:] と [:upper:] を含む)
[:digit:]
十進法の数字の集合
[:xdigit:]
十六進法の数字の集合
[:alnum:]
アルファベットと数字の集合
( [:alpha:] と [:digit:] を含む)
[:blank:]
空白文字の集合
(改行を含まない)
[:space:]
空白文字の集合
(改行等を含む)
[:punct:]
句読点等の集合
[:print:]
表示可能な文字の集合
[:cntrl:]
制御文字の集合
リダイレクト
リダイレクトはコマンドのファイル記述子を変更する機能です。リダイレクトを使用すると、コマンドの標準入力や標準出力を通常とは異なるファイルに繋ぎ換えた状態でコマンドを実行することができます。ファイルへのリダイレクト
最もよく使われるリダイレクトは、ファイルへのリダイレクトです。 入力のリダイレクト
<
トークン
出力のリダイレクト
>
トークン
>| トークン
>> トークン
入出力のリダイレクト
<>
トークン
•演算子 >|
では、対象ファイルが存在しそれが通常のファイルの場合、ファイルを開く際にファイルの内容を空にします。
•演算子 >
は、clobber
オプションが有効ならば演算子
>|
と同じです。しかし
clobber
オプションが無効ならば、対象ファイルが存在しそれが通常のファイルの場合、エラーになります。
•演算子
>>
では、ファイルを追記モードで開きます。ファイルへの書き込みは常にファイルの末尾へ追記する形で行われます。
ファイル記述子の複製
ファイル記述子の複製のリダイレクトでは、既存のファイル記述子をコピーしたり閉じたりできます。 ファイル記述子の複製
<&
トークン
>& トークン
ヒアドキュメントとヒアストリング
ヒアドキュメント・ヒアストリングを使うとコマンドに直接テキストを渡すことができます。 ヒアドキュメント
<<
トークン
<<- トークン
ヒアストリング
<<<
トークン
パイプリダイレクト
パイプリダイレクトを用いるとプロセス間通信に利用可能なパイプを開くことができます。 パイプリダイレクト
>>|
トークン
プロセスリダイレクト
プロセスリダイレクトを用いると別のコマンドの入力または出力を受け渡せるパイプを開くことができます。 プロセスリダイレクト
<(サブコマンド...)
>(サブコマンド...)
コマンドの実行とその環境
この節ではコマンドがどのように実行されるかを説明します。単純コマンドの実行
単純コマンドは以下の手順に従って実行されます。
1.単純コマンドに含まれる、変数代入とリダイレクト以外のトークンを全て展開します。展開エラーが発生した場合は、この単純コマンドの実行は中止されます
(このとき単純コマンドの終了ステータスは非
0 です)。
以下、展開の結果得られた最初の単語を
コマンド名、それ以外の単語をコマンド引数と呼びます。得られた単語が一つの場合は、コマンド引数は存在しません。得られた単語が一つもない場合は、コマンド名もコマンド引数も存在しません。
2.コマンド名が存在する場合、単純コマンドに対するリダイレクトを実行します。リダイレクトに含まれるトークンの展開はここで行われます。リダイレクトエラーが発生した場合は、この単純コマンドの実行は中止されます
(このとき単純コマンドの終了ステータスは非
0
です)。リダイレクトに含まれるトークンの展開時のエラーはリダイレクトエラーに含まれます。
注記
Yash
以外のシェルではリダイレクトの実行タイミングが異なることがあります。POSIX
では、コマンド名が存在しない場合または特殊組込みである場合にリダイレクトと代入のどちらを先に行うか規定されていません。
3.単純コマンドに含まれる変数代入を実行します
(配列の代入を含む)。それぞれの変数代入について、値が展開され、指定された名前の変数に代入されます。代入エラーが発生した場合は、この単純コマンドの実行は中止されます
(このとき単純コマンドの終了ステータスは非
0
です)。代入される値の展開時のエラーは代入エラーに含まれます。
コマンド名が指定された場合または
all-export
オプションが有効な場合は、代入される変数は自動的にエクスポート対象になります。
注記
Yash
以外のシェルでは代入の動作が異なることがあります。特殊組込みまたは関数では変数はエクスポート対象にならないかもしれません。また関数の実行終了後も変数が残るかもしれません。
•コマンド名が存在しないか、あるいはコマンド名が特殊組込みを示している場合は、変数代入は恒久的です。すなわち、代入の結果はこの単純コマンドの実行が終わった後もそのまま残ります。
•それ以外の場合は、変数代入は一時的です。すなわち、代入の効果はこの単純コマンドの実行中のみ有効で、実行が終わった後に代入は取り消されます。
4.コマンド名が存在しない場合は、サブシェルでリダイレクトを実行し、そこで単純コマンドの実行を終了します。リダイレクトエラーが発生した場合、単純コマンドの終了ステータスは非
0
になります。代入の途中でコマンド置換が行われた時は、最後のコマンド置換のコマンドの終了ステータスが単純コマンドの終了ステータスになります。それ以外の場合、終了ステータスは
0 になります。
5.後述のコマンドの検索の仕方に従って実行すべきコマンドを特定し、そのコマンドを実行します。
実行したコマンドの終了ステータスがこの単純コマンドの終了ステータスになります。コマンドが見つからなかった場合は、コマンドは実行されず終了ステータスは
127
になります。コマンドが見つかったが起動に失敗した場合は、終了ステータスは
126
になります。コマンドが起動されたがシグナルによって中断された場合は、終了ステータスはそのシグナルの番号に
384
を足した数になります。
注記
POSIX
ではコマンドがシグナルによって中断された場合の終了ステータスは
128
より大きな数としか定められていないので、yash
以外のシェルでは終了ステータスが異なることがあります。
非 POSIX
準拠モードにおいてコマンドが見つからなかったとき、コマンド
eval -i -- "${COMMAND_NOT_FOUND_HANDLER-}"
が実行されます。ただしこのとき位置パラメータはコマンド名とコマンド引数に一時的に置き換えられます。またこのコマンドの実行中に定義されたローカル変数はこのコマンドの終了時に削除されます。このコマンドの実行時には
HANDLED
ローカル変数が空文字列を値としてあらかじめ定義されます。このコマンドの実行後にこの変数の値が空文字列でなくなっていれば、このコマンドの終了ステータスがこの単純コマンドの終了ステータスとなり、コマンドが見つからなかったことはエラーとはみなされません。
•コマンドが外部コマンドの場合は、コマンドはサブシェルで
exec
システムコールを呼び出すことにより実行されます。コマンド名とコマンド引数が起動するコマンドに渡されます。またエクスポート対象となっている変数が環境変数としてコマンドに渡されます。
•コマンドが組込みコマンドの場合は、コマンド引数を引数として組込みコマンドが実行されます。
•コマンドが関数の場合は、その関数の内容が実行されます。コマンド引数が関数の引数として渡されます。
1.コマンド名にスラッシュ
( /)
が含まれている場合は、それが実行すべき外部コマンドへのパス名であると特定されます。
2.コマンド名が特殊組込みコマンドならば、その組込みコマンドが実行すべきコマンドとして特定されます。
3.コマンド名と同じ名前の関数が存在すれば、その関数が実行すべきコマンドとして特定されます。
4.コマンド名が準特殊組込みコマンドならば、その組込みコマンドが実行すべきコマンドとして特定されます。
5.コマンド名が通常の組込みコマンドならば、その組込みコマンドが実行すべきコマンドとして特定されます。(POSIX
準拠モードのときを除く)
6.PATH
変数の値に従って、実行すべき外部コマンドを検索しそのパス名を特定します。
PATH
変数の値は、いくつかのディレクトリのパス名をコロン
( :)
で区切ったものとみなされます
(空のパス名はシェルの作業ディレクトリを表しているものとみなします)。それらの各ディレクトリについて順に、ディレクトリの中にコマンド名と同じ名前の実行可能な通常のファイルがあるか調査します。そのようなファイルがあれば、そのファイルが実行すべき外部コマンドとして特定されます
(ただし、コマンド名と同じ名前の組込みコマンドがあれば、代わりにその組込みコマンドが実行すべきコマンドとして特定されます)。どのディレクトリにもそのようなファイルが見つからなければ、実行すべきコマンドは見つからなかったものとみなされます。
シェルの終了
シェルは、入力が終わりに達して全てのコマンドを解釈・実行し終えた時や、exit 組込みコマンドを実行したときなどに終了します。シェルの終了ステータスは、シェルが最後に実行したコマンドの終了ステータスを 256 で割った余りです (一つもコマンドを実行しなかったときは 0)。•文法エラーのためコマンドを解釈できないとき
(シェルの初期化中を除く)
•POSIX
準拠モードで、特殊組込みコマンドの実行中にエラーが発生したとき
•POSIX
準拠モードで、特殊組込みコマンドに対してリダイレクトエラーが発生したとき
•単純コマンドで代入エラーが発生したとき
•展開エラーが発生したとき
(シェルの初期化中を除く)
関数
関数は一つの複合コマンドを単純コマンドのように呼び出せるようにする機構です。関数は関数定義コマンドによって定義でき、単純コマンドによって実行できます。関数を削除するには unset 組込みコマンドを使います。コマンドの実行環境
シェルは実行時に以下の情報を保持します。•作業ディレクトリ
•開いているファイル記述子
•ファイル作成マスク
(umask)
•受信時の挙動が
『無視』
に設定されたシグナルの集合
(trap)
•環境変数
•リソース制限
(ulimit)
•Trap
組込みコマンドで登録したトラップの設定は、(受信時の挙動が
『無視』
のものを除き)
サブシェルではすべて解除されます。(注)
•サブシェルでは対話モードとジョブ制御は解除され、元のシェルのジョブの情報は受け継がれません。
対話モード
対話モードは、利用者が直接シェルを操作することを意図したモードです。シェルの起動時に -i オプションを指定した場合 (その他対話モードが有効になる条件が満たされている場合)、シェルは対話モードになります。シェルが起動した後は、そのシェルの対話モードのオン・オフを切り替えることはできません。•シェルの初期化時に初期化スクリプトを読み込んで実行します。
•コマンドを読み込む際にメールチェックを行い、プロンプトを表示します。ジョブ制御が有効ならジョブの状態変化も表示します。端末の種類によっては行編集が使えます。
•実行したコマンドは自動的にコマンド履歴に登録されます。
•実行したコマンドが
SIGINT/SIGPIPE
以外のシグナルによって中断されたとき、シェルはそのことを示す警告メッセージを標準エラーに出力します。
•ファイルのリダイレクトの対象ファイルを指示するトークンに対してパス名展開を行います。
•コマンド解釈・実行時に文法エラーや展開エラーが発生してもシェルは終了しません。(シェルの終了を参照)
•SIGINT, SIGTERM, SIGQUIT
シグナルを受けても、シェルは終了しません。
•シグナル受信時の挙動がシェルの起動時に最初から
『無視』
に設定されていても trap
組込みコマンドでシグナル受信時の挙動を変更できます。
•特殊パラメータ
- の値に i
が含まれます。
•シェル実行中に
LC_CTYPE
変数の値が変わった時、それを直ちにシェルのロケール情報に反映します。(POSIX
準拠モードを除く)
•Exec
オプションが無効な時でもコマンドを実行します。
•Ignore-eof
オプションが効果を発揮します。
•Exit
組込みコマンドでシェルを終了しようとした時、停止しているジョブがあれば、シェルは警告を表示してすぐには終了しません。このときは続けざまにもう一度
exit
コマンドを実行すると本当にシェルを終了させることができます。シェルへの入力が終わりに達した場合も同様です。
•Suspend
組込みコマンドでシェルを停止させようとした時、シェルがセッションリーダーならエラーを出力して停止しません。
•ドット組込みコマンドで読み込むスクリプトファイルが見つからなくても、シェルは終了しません。
•Exec
組込みコマンドでコマンドの実行に失敗したときでもシェルは終了しません。(POSIX
準拠モードのときを除く)
•Wait
組込みコマンドで待っているジョブが終了したとき、そのことを示すメッセージを出力します。(ジョブ制御が有効な時のみ。POSIX
準拠モードを除く)
•Read
組込みコマンドが二行目以降を読むときプロンプトを出します。
プロンプト
対話モードでは、シェルはコマンドの入力を読み取る直前に プロンプトを標準エラーに出力します。プロンプトの内容は PS1 変数で指定します。ただし、複数行にわたるコマンドを読み取る際、二行目以降の読み取りには PS1 ではなく PS2 変数の値がプロンプトとして表示されます。ベル文字 (ASCII
コード番号 7)
\e
エスケープ文字
(ASCII コード番号 27)
\j
現在シェルが抱えているジョブの数
\n
改行文字 (ASCII
コード番号 10)
\r
復帰文字 (ASCII
コード番号 13)
\!
これから入力しようとしているコマンドの履歴番号
\$
シェルの実効ユーザ
ID が 0 のときは
#、それ以外の時は
$。
\\
バックスラッシュ
( \)
\[, \]
この二つの記法は、実際には端末に表示されないプロンプトの一部分を指示するのに使います。\[
と \]
で囲んだ部分は、行編集がプロンプトの文字数を計算する際に、文字数に数えられません。端末に表示されないエスケープシーケンスなどをプロンプトに含める際は、その部分を
\[ と \]
で囲んでください。この指定を怠ると、行編集の表示が乱れることがあります。
\fフォント指定.
行編集を使用している場合、この記法は端末のフォントの表示を変更するための特殊な文字の羅列に変換されます
(端末が対応している場合のみ)。行編集を使用していない場合や端末が対応していない場合は、この記法は単に無視されます。
フォント指定の部分にはフォントの種類を指定するための以下の文字を指定します。
k
文字と背景の色は最終的に端末によって決まるため、実際にはここで指定した色と異なる色で表示されることがあります。
文字の色を黒にする
r
文字の色を赤にする
g
文字の色を緑にする
y
文字の色を黄にする
b
文字の色を青にする
m
文字の色をマゼンタにする
c
文字の色をシアンにする
w
文字の色を白にする
K
背景の色を黒にする
R
背景の色を赤にする
G
背景の色を緑にする
Y
背景の色を黄にする
B
背景の色を青にする
M
背景の色をマゼンタにする
C
背景の色をシアンにする
W
背景の色を白にする
t
文字または背景の色を明るくする
(上記の文字・背景の色を変更する文字の直後でのみ有効)
d
文字と背景の色を標準状態に戻す
s
文字を目立たせる
u
文字に下線を引く
v
文字の色を反転させる
b
文字を点滅させる
i
文字の色を暗くする
o
文字を太く目立たせる
x
文字を見えなくする
D
色と装飾を標準状態に戻す
コマンド履歴
コマンド履歴は実行したコマンドを記録し後で再び実行することのできる機能です。対話モードでシェルが読み込んだコマンドは自動的にコマンド履歴に記録されます。履歴に記録したコマンドは行編集で呼び出して再実行することができます。また fc・history 組込みコマンドで履歴のコマンドを再実行したり編集したりすることもできます。•Fc または history
組込みコマンドを実行したとき
•行編集を使用してコマンドを入力するとき
(履歴データを行編集の中で使わなくても履歴機能は使われます)
•入力したコマンドが履歴に登録されるとき
メールチェック
対話モードのシェルには、電子メールが届いたらそれを知らせる機能があります。これは所定のファイルの更新日時を調べて、更新日時が変わっていたらメッセージを表示するというものです。受信したメールのデータが保存されるファイルをチェック対象として指定しておくことで、メールを受信したときにメッセージが表示されるようになります。ジョブ制御
ジョブ制御とは、複数のコマンドを同時に実行し、必要に応じてそれらを中断・再開させる機能です。シェルは、オペレーティングシステムが提供する端末の機能やプロセスグループ管理機構などを用いて、ジョブ制御を実現します。•シェルが起動する各プロセスは、パイプラインごとに共通の一意なプロセスグループに属します。すなわち、シェルが起動するコマンドはそれぞれパイプラインごとにジョブとして扱われます。
•シェルがジョブを起動しそのジョブのプロセスが終了するのを待っている間にそのプロセスが停止した場合、シェルは
(プロセスが実際に終了したときと同様に)
次のコマンドの処理に移ります。このときシェルはジョブが停止したことを覚えているので、後でジョブを再開させることができます。
•ジョブが同期的に実行される場合、そのジョブの実行中はそのジョブのプロセスグループが端末のフォアグラウンドプロセスグループになります。ジョブの実行が終了
(または停止)
すると、再びシェルがフォアグラウンドになります。
•コマンド置換のコマンドを実行するサブシェルもまた独立したプロセスグループに属します。しかしシェルはこれをジョブとしては扱わないため、停止・再開させることはできません。
•シェルが対話モードの場合、プロンプトを出す前に毎回コマンド
jobs -n
を実行するのと同様にしてジョブの状態変化を報告します。
•非同期コマンドの標準入力が自動的に
/dev/null
にリダイレクトされません。
•SIGTSTP
シグナルを受けても、シェルは停止しません。
•特殊パラメータ
- の値に m
が含まれます。
•Wait
組込みコマンドで待っているジョブが終了したとき、そのことを示すメッセージを出力します。(対話モードの時のみ。POSIX
準拠モードを除く)
現在シェルが管理しているジョブを表示します。
fg および bg
ジョブをフォアグラウンドまたはバックグラウンドで実行します。主に停止したジョブを再開させるのに使います。
wait
ジョブが終了
(または停止)
するまで待ちます。
disown
ジョブの存在を忘れます。
kill
プロセスにシグナルを送ります。
タイミングにかかわらず、ジョブの状態が変化したら直ちにそれを報告します。
notify-le
行編集を行っている最中にジョブの状態が変化したら直ちにそれを報告します。
•ジョブの実行が終了した後、そのことを
jobs
組込みコマンドで表示したとき
•Wait
組込みコマンドでジョブの終了を待ったとき
•Disown
組込みコマンドでジョブを削除したとき
ジョブ ID
いくつかの組込みコマンドでは、操作対象のジョブを指定するために ジョブ ID という以下のような記法を用います。 %, %%, %+現在のジョブ
%-
前のジョブ
%n
ジョブ番号が
n のジョブ ( n
は自然数)
%string
ジョブ名が文字列で始まるジョブ
%?string
ジョブ名が文字列を含むジョブ
•停止中のジョブがある場合は、現在のジョブはその中から選ばれます。
•現在のジョブ以外に停止中のジョブがある場合は、前のジョブはその中から選ばれます。
•現在のジョブと前のジョブは異なるジョブになるように選ばれます。ジョブが一つしかないときはそれが現在のジョブになり、前のジョブはなくなります。
•現在のジョブが終了したときは、前のジョブが現在のジョブになります。これ以外に現在のジョブが変更される場合は、元の現在のジョブは前のジョブになります。
•フォアグラウンドで実行していたジョブが停止したときは、そのジョブは現在のジョブになります。
新しく非同期コマンドを起動したとき、それは現在のジョブになります。
cur-bg
Bg
組込みコマンドでジョブを再開したとき、そのジョブは現在のジョブになります。
cur-stop
実行中のジョブが停止したとき、そのジョブは現在のジョブになります。
組込みコマンド
組込みコマンドとはシェルに内蔵されたコマンドです。組込みコマンドは外部のプログラムを起動することなくシェル自身によって実行されます。組込みコマンドの種類
Yash の組込みコマンドは特殊組込みコマンド・準特殊組込みコマンド・通常の組込みコマンドの三種類に分けられます。コマンドの引数の構文
ここでは組込みコマンドの引数に関する一般的な規則について説明します。Yash の組込みコマンドの引数の指定・解釈の仕方は、他に断りがない限りこの規則に従います。•set -o errexit -m
•set -oerrexit -m
•fc --editor vi --quiet
•fc --editor=vi --quiet
•set -a -b -- -c -d
行編集
行編集機能は、対話モードのシェルにコマンドを入力する際に使える、コマンドの簡易編集機能です。行編集機能は、コマンドを編集するための簡単なエディタとして働きます。行編集機能はコマンド履歴とも連携しており、fc コマンドを使ってエディタを起動する代わりに行編集で直接コマンドを編集・再実行できます。行編集のオプション
行編集を有効にし編集モードを選択するオプションとして、以下のオプションが set 組込みコマンドで設定できます。 viVi
風編集モードを有効にします
emacs
Emacs
風編集モードを有効にします
このオプションが無効な時は、長いコマンドを入力してコマンドが右プロンプトに達すると、右プロンプトは見えなくなります。このオプションが有効な時は、右プロンプトは見えなくなる代わりに下に移動します。
le-comp-debug
補完を行う際にデバッグ用の情報を出力します
le-conv-meta
Terminfo
データベースで得られた情報を無視し、入力の
8 ビット目を常に meta-key
フラグとみなします。
le-no-conv-meta
Terminfo
データベースで得られた情報を無視し、入力の
8
ビット目を他のビットと同様に扱います。
Le-conv-meta オプションと le-no-conv-meta
オプションは片方しか有効にできません
(片方を有効にするともう片方は自動的に無効になります)。どちらも無効な時は
terminfo
データベースの情報に従って
8 ビット目を meta-key
とみなすかどうか判断します。
le-predict
コマンドライン推定を有効にします
le-predict-empty
コマンドライン推定とこのオプションが有効な時、まだ何も入力されていないコマンドラインでも推定結果を表示します。
le-prompt-sp
このオプションが有効な時、シェルはプロンプトを出力する前に、プロンプトが必ず行頭に来るようにカーソルを移動するための特殊な文字列を出力します。
このオプションは最初から有効になっています。
le-visible-bell
シェルが警告を発する際、警告音を鳴らす代わりに端末を点滅させます。
編集モード
Vi 風編集モードは vi に似たキー操作で編集を行う編集モードです。Vi 風編集モードでは、挿入モードとコマンドモードの二つのモードを適宜切り替えて編集を行います。編集が始まるときはモードは必ず挿入モードになっています。挿入モードでは入力した文字が基本的にそのままバッファに挿入されます。コマンドモードでは入力した文字はカーソルを移動したり文字を消去したりするコマンドとして解釈されます。行編集コマンド
行編集中に入力された文字は全て以下の行編集コマンドのいずれかとして解釈されます。コマンドとキーの対応は bindkey 組込みコマンドで変更できます (検索モードを除く)。
noop
何も行いません。
vi-command
alert
\^[
警告音を発しまたは端末を点滅させます。
self-insert
入力した文字を現在のカーソルの位置に挿入します。(エスケープシーケンスによるエスケープの対象となる文字は挿入できません)
コマンドライン推定が有効な場合、推定された部分は無視します。Accept-prediction
コマンドも参照。
vi-insert, emacs
insert-tab
\\
タブを現在のカーソルの位置に挿入します。
emacs
expect-verbatim
\^[\^I
このコマンドの直後に入力する一文字を現在のカーソル位置に挿入します。このコマンドを使うと
self-insert
コマンドで入力できない文字も入力できます
(ナル文字 '\0'
を除く)。
vi-insert, vi-search, emacs-search
digit-argument
\^V
emacs
\^Q, \^V
このコマンドは数字またはハイフンの入力に対してのみ有効です。入力した数字を次のコマンドへの引数として受け付けます
(ハイフンの場合は符号を反転します)。
Digit-argument
コマンドを連続して使うことで複数桁の引数を指定できます。例えば
vi
風編集モードのコマンドモードで
12l
と入力すると、forward-char
コマンドに引数 12
を与えたことになります
(すなわちカーソルが左に
12 文字分移動します)。
vi-command
bol-or-digit
1, 2, 3, 4,
5, 6, 7, 8, 9
emacs
\^[0, \^[1, \^[2,
\^[3, \^[4, \^[5, \^[6, \^[7, \^[8,
\^[9, \^[-,
引数がない場合は
beginning-of-line
コマンドと同じように、引数がある場合は
digit-argument
コマンドと同じように動作します。
vi-command
accept-line
0
行編集を終了し、現在のバッファの内容をシェルへの入力として与えます。行の末尾には自動的に改行が付け加わります。
vi-insert, vi-command, emacs, emacs-search
abort-line
\^J, \^M
行編集を中止し、空の入力をシェルに与えます。
vi-insert, vi-command, vi-search, emacs, emacs-search
eof
\!, \^C
シェルに入力の終わりを知らせます
(これによりシェルは終了します)。
eof-if-empty
バッファが空ならば、行編集を終了し、シェルに入力の終わりを知らせます
(これによりシェルは終了します)。バッファが空でなければ、alert
コマンドと同じ動作をします。
vi-insert, vi-command
eof-or-delete
\#, \^D
バッファが空ならば、行編集を終了し、シェルに入力の終わりを知らせます
(これによりシェルは終了します)。バッファが空でなければ、delete-char
コマンドと同じ動作をします。
emacs
accept-with-hash
\#, \^D
引数が与えられていないかバッファの最初の文字が
#
でなければ、バッファの最初に
#
を挿入します。そうでなければバッファの最初の
#
を削除します。いずれの場合も、その後
accept-line
コマンドと同じ動作をします。
vi-command
accept-prediction
#
emacs
\^[#
Accept-line
コマンドと同様に行編集を終了しますが、推定された部分も含めたコマンドを入力として扱います。
setmode-viinsert
編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
setmode-vicommand
i, \I
編集モードを
vi
風編集モードのコマンドモードに変更します。
vi-insert
setmode-emacs
\^[
編集モードを
emacs
風編集モードに変更します。
expect-char, abort-expect-char
これは find-char
コマンドなどを実装するために
yash
内部で使われているコマンドで、直接使用しても意味はありません。
redraw-all
行編集のプロンプトやバッファを端末に表示しなおします。
vi-insert, vi-command, vi-search, emacs, emacs-search
clear-and-redraw-all
\^L
端末の表示をクリアし、行編集のプロンプトやバッファを端末に表示しなおします。
•一文字以上の連続した英数字または下線
( _)
•一文字以上の連続した、英数字でも下線でも空白でもない文字
カーソルを次の文字に移動します。
vi-insert
backward-char
\R
vi-command
l, (space), \R
emacs
\R, \^F
カーソルを前の文字に移動します。
vi-insert
forward-bigword
\L
vi-command
h, \B, \L, \?,
\^H
emacs
\L, \^B
カーソルを次の
bigword に移動します。
vi-command
end-of-bigword
W
カーソルを
bigword
の終わりまで移動します。
vi-command
backward-bigword
E
カーソルを前の
bigword に移動します。
vi-command
forward-semiword
B
カーソルを次の
semiword に移動します。
end-of-semiword
カーソルを
semiword
の終わりまで移動します。
backward-semiword
カーソルを前の
semiword に移動します。
forward-viword
カーソルを次の
viword に移動します。
vi-command
end-of-viword
w
カーソルを
viword
の終わりまで移動します。
vi-command
backward-viword
e
カーソルを前の
viword に移動します。
vi-command
forward-emacsword
b
カーソルを次の
emacsword に移動します。
emacs
backward-emacsword
\^[f, \^[F
カーソルを前の
emacsword に移動します。
emacs
beginning-of-line
\^[b, \^[B
カーソルをバッファの先頭に移動します。
vi-insert, vi-command
end-of-line
\H
emacs
\H, \^A
カーソルをバッファの末尾に移動します。
vi-insert
go-to-column
\E
vi-command
$, \E
emacs
\E, \^E
カーソルをバッファ内の
n
文字目に移動します。ただし
n は引数です
(引数が与えられていない場合は
1)。
vi-command
first-nonblank
|
カーソルをバッファ内の最初の空白でない文字に移動します。
vi-command
find-char
^
このコマンドの直後に入力した文字がある位置までカーソルを進めます。
vi-command
find-char-rev
f
emacs
\^]
このコマンドの直後に入力した文字がある位置までカーソルを戻します。
vi-command
till-char
F
emacs
\^[\^]
このコマンドの直後に入力した文字がある位置の直前までカーソルを進めます。
vi-command
till-char-rev
t
このコマンドの直後に入力した文字がある位置の直後までカーソルを戻します。
vi-command
refind-char
T
前回実行した
find-char, find-char-rev, till-char, till-char-rev
コマンドを再実行します。
vi-command
refind-char-rev
;
前回実行した
find-char, find-char-rev, till-char, till-char-rev
コマンドを、カーソルの進む向きを逆にして再実行します。
vi-command
,
カーソルのところにある文字を削除します。引数を与えた場合は
kill-char
コマンドと同じ動作をします。
vi-insert, emacs
delete-bigword
\X
カーソルのところにある
bigword
を削除します。引数を与えた場合は
kill-bigword
コマンドと同じ動作をします。
delete-semiword
カーソルのところにある
semiword
を削除します。引数を与えた場合は
kill-semiword
コマンドと同じ動作をします。
delete-viword
カーソルのところにある
viword
を削除します。引数を与えた場合は
kill-viword
コマンドと同じ動作をします。
delete-emacsword
カーソルのところにある
emacsword
を削除します。引数を与えた場合は
kill-emacsword
コマンドと同じ動作をします。
backward-delete-char
カーソルの前にある文字を削除します。引数を与えた場合は
backward-kill-char
コマンドと同じ動作をします。
vi-insert, emacs
backward-delete-bigword
\B, \?, \^H
カーソルの前にある
bigword
を削除します。引数を与えた場合は
backward-kill-bigword
コマンドと同じ動作をします。
backward-delete-semiword
カーソルの前にある
semiword
を削除します。引数を与えた場合は
backward-kill-semiword
コマンドと同じ動作をします。
vi-insert
backward-delete-viword
\^W
カーソルの前にある
viword
を削除します。引数を与えた場合は
backward-kill-viword
コマンドと同じ動作をします。
backward-delete-emacsword
カーソルの前にある
emacsword
を削除します。引数を与えた場合は
backward-kill-emacsword
コマンドと同じ動作をします。
delete-line
バッファの内容を全て削除します。
forward-delete-line
カーソル以降の全ての文字を削除します。
backward-delete-line
カーソルより前の全ての文字を削除します。
vi-insert
kill-char
\$, \^U
カーソルのところにある文字を削除し、キルリングに保管します。
vi-command
kill-bigword
x, \X
カーソルのところにある
bigword
を削除し、キルリングに保管します。
kill-semiword
カーソルのところにある
semiword
を削除し、キルリングに保管します。
kill-viword
カーソルのところにある
viword
を削除し、キルリングに保管します。
kill-emacsword
カーソルのところにある
emacsword
を削除し、キルリングに保管します。
emacs
backward-kill-char
\^[d, \^[D
カーソルの前にある文字を削除し、キルリングに保管します。
vi-command
backward-kill-bigword
X
カーソルの前にある
bigword
を削除し、キルリングに保管します。
emacs
backward-kill-semiword
\^W
カーソルの前にある
semiword
を削除し、キルリングに保管します。
backward-kill-viword
カーソルの前にある
viword
を削除し、キルリングに保管します。
backward-kill-emacsword
カーソルの前にある
emacsword
を削除し、キルリングに保管します。
emacs
kill-line
\^[\B, \^[\?,
\^[\^H
バッファの内容を全て削除し、キルリングに保管します。
forward-kill-line
カーソル以降の全ての文字を削除し、キルリングに保管します。
emacs
backward-kill-line
\^K
カーソルより前の全ての文字を削除し、キルリングに保管します。
emacs
put-before
\$, \^U, \^X\B,
\^X\?
最後にキルリングに保管した文字列をカーソルの直前に挿入します。カーソルは挿入した文字列の最後の文字のところに移動します。
vi-command
put
P
最後にキルリングに保管した文字列をカーソルの直後に挿入します。カーソルは挿入した文字列の最後の文字のところに移動します。
vi-command
put-left
p
最後にキルリングに保管した文字列をカーソルの直前に挿入します。カーソルは挿入した文字列の直後に移動します。
emacs
put-pop
\^Y
このコマンドは
put-before, put, put-left, put-pop
コマンドの直後にだけ使えます。このコマンドは直前のコマンドでキルリングから挿入した文字列を削除し、代わりにその文字列の前にキルリングに保管した文字列を挿入します。
emacs
undo
\^[y, \^[Y
直前の編集コマンドを取り消し、バッファの内容を前の状態に戻します。
vi
undo-all
u
emacs
\^_, \^X\$, \^X\^U
全ての編集コマンドを取り消し、バッファの内容を初期状態に戻します。
vi
cancel-undo
U
emacs
\^[\^R, \^[r, \^[R
undo, undo-all
による編集コマンドの取り消しを取り消し、バッファの内容を復元します。
vi
cancel-undo-all
\^R
undo, undo-all
による編集コマンドの取り消しを全て取り消し、バッファの内容を復元します。
redo
直前の編集コマンドを繰り返します。
vi-command
.
complete
現在のカーソル位置で補完を行います。補完候補が複数ある場合はその一覧を表示します。
complete-next-candidate
補完候補の一覧を既に表示している場合は一覧の中から次の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
vi-insert, emacs
complete-prev-candidate
\^I
補完候補の一覧を既に表示している場合は一覧の中から前の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
vi-insert, emacs
complete-next-column
\bt
補完候補の一覧を既に表示している場合は一覧の中から次の列の最初の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
complete-prev-column
補完候補の一覧を既に表示している場合は一覧の中から前の列の最初の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
complete-next-page
補完候補の一覧を既に表示している場合は一覧の中から次のページの最初の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
complete-prev-page
補完候補の一覧を既に表示している場合は一覧の中から前のページの最初の候補を選択します。それ以外の場合は
complete
コマンドと同じ動作をします。
complete-list
現在のカーソル位置で補完を行います。引数を指定しない場合、補完候補の一覧を表示します。引数を指定すると、その番号の候補で補完内容を確定します。
emacs
complete-all
\^[?, \^[=
現在のカーソル位置で補完を行い、カーソル位置にある単語をすべての補完候補で置き換えます。
emacs
complete-max
\^[*
現在のカーソル位置で補完を行い、各補完候補の最長共通先頭部分をカーソル位置に挿入します。
complete-max-then-list
一回目はまず
complete-max
コマンドと同様に共通部分を挿入します。二回目以降は
complete
コマンドと同様に候補の一覧を表示します。
complete-max-then-next-candidate
一回目はまず
complete-max
コマンドと同様に共通部分を挿入します。二回目以降は
complete-next-candidate
コマンドと同様に候補を選択します。
complete-max-then-prev-candidate
一回目はまず
complete-max
コマンドと同様に共通部分を挿入します。二回目以降は
complete-prev-candidate
コマンドと同様に候補を選択します。
clear-candidates
補完候補の一覧を消去します。
vi-replace-char
カーソルのところにある文字を、このコマンドの直後に入力した文字に置き換えます。
vi-command
vi-insert-beginning
r
カーソルをバッファの先頭に移動したのち、setmode-viinsert
コマンドと同じ動作をします。
vi-command
vi-append
I
カーソルを次の文字に移動したのち、setmode-viinsert
コマンドと同じ動作をします。
vi-command
vi-append-to-eol
I
カーソルをバッファの末尾に移動したのち、setmode-viinsert
コマンドと同じ動作をします。
vi-command
vi-replace
A
Setmode-viinsert
コマンドと同じ動作をしますが、同時に上書きモードを有効にします。上書きモードでは、self-insert
コマンドは文字を挿入する代わりにカーソルのところにある文字を置き換えます。上書きモードは編集モードを変更するまで有効です。
vi-command
vi-switch-case
R
このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かしたカーソルの範囲にある文字の大文字と小文字を入れ替えます。
vi-switch-case-char
カーソルのところにある文字の大文字と小文字を入れ替えて、カーソルを次の文字に移動します。
vi-command
vi-yank
~
このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かしたカーソルの範囲にある文字をキルリングに保管します。
vi-command
vi-yank-to-eol
y
カーソルの位置からバッファの末尾までにある文字をキルリングに保管します。
vi-command
vi-delete
Y
このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かしたカーソルの範囲にある文字を削除し、キルリングに保管します。
vi-command
vi-delete-to-eol
d
カーソルの位置からバッファの末尾までにある文字を削除し、キルリングに保管します。
vi-command
vi-change
D
このコマンドの直後には移動コマンドを入力する必要があります。移動コマンドが動かしたカーソルの範囲にある文字を削除し、その後編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-change-to-eol
c
カーソルの位置からバッファの末尾までにある文字を削除し、その後編集モードを
vi
風編集モードの挿入モードに変更します。
Delete the characters from the current cursor position to the end of the line
and switch to the vi insert mode.
vi-command
vi-change-line
C
バッファの内容を全て削除し、その後編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-yank-and-change
S
Vi-change
コマンドと同様ですが、削除した文字列はキルリングに補完されます。
vi-yank-and-change-to-eol
Vi-change-to-eol
コマンドと同様ですが、削除した文字列はキルリングに補完されます。
vi-yank-and-change-line
Vi-change-line
コマンドと同様ですが、削除した文字列はキルリングに補完されます。
vi-substitute
カーソルのところにある文字を削除しキルリングに保管した後、編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-append-last-bigword
s
コマンド履歴の中で最も新しいコマンドにおける最後の
bigword
を、空白文字に続けてカーソルの位置の直後に挿入します。引数
n
を与えたときは最後の
bigword の代わりに n
番目の bigword
を挿入します。その後、setmode-viinsert
コマンドと同じ動作をします。
vi-command
vi-exec-alias
_
このコマンドの直後に入力した文字を
c とすると、 _c
という名前のエイリアスの内容をシェルへの入力とみなして行編集コマンドとして解釈・実行します。
vi-command
vi-edit-and-accept
@
エディタとして
vi
を起動し、バッファの内容を編集させます。エディタが終了すると編集後の内容をバッファに反映した後
accept-line
コマンドと同じ動作をします。ただしエディタの終了ステータスが
0
でないときは何も行いません。
vi-command
vi-complete-list
v
Complete-list
コマンドと同様ですが、候補を確定したとき編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-complete-all
=
Complete-all
コマンドと同様ですが、単語を置き換えた後、編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-complete-max
*
Complete-max
コマンドと同様ですが、候補を挿入した後、編集モードを
vi
風編集モードの挿入モードに変更します。
vi-command
vi-search-forward
\\
順方向の履歴検索を開始します。編集モードを
vi
風編集モードの検索モードに変更します。
vi-command
vi-search-backward
?
逆方向の履歴検索を開始します。編集モードを
vi
風編集モードの検索モードに変更します。
vi-command
/
emacs-transpose-chars
カーソルの前にある文字を右に移動します。
emacs
emacs-transpose-words
\^T
カーソルの前にある
emacsword
を右に移動します。
emacs
emacs-downcase-word
\^[t, \^[T
カーソルの後にある
emacsword
を小文字に変換します。
emacs
emacs-upcase-word
\^[l, \^[L
カーソルの後にある
emacsword
を大文字に変換します。
emacs
emacs-capitalize-word
\^[u, \^[U
カーソルの後にある
emacsword
をキャピタライズします
(各単語の頭文字だけ大文字にする)。
emacs
emacs-delete-horizontal-space
\^[c, \^[u
カーソルの前後にある空白を削除します。引数を与えるとカーソルの前にある空白を削除します。
emacs
emacs-just-one-space
\^[\\
カーソルの前後にある空白の個数を一つに調整します。引数を与えるとその引数の数だけ空白を残します。
emacs
emacs-search-forward
\^[
(エスケープの後に空白文字)
順方向の履歴検索を開始します。編集モードを
emacs
風編集モードの検索モードに変更します。
emacs
emacs-search-backward
\^S
順方向の履歴検索を開始します。編集モードを
emacs
風編集モードの検索モードに変更します。
emacs
\^R
oldest-history
コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルの位置は変わりません。
newest-history
コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルの位置は変わりません。
return-history
コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルの位置は変わりません。
oldest-history-bol
コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの先頭に移動します。
vi-command
newest-history-bol
G
コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの先頭に移動します。
return-history-bol
コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの先頭に移動します。
vi-command
oldest-history-eol
g
コマンド履歴の中で最も古いコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの末尾に移動します。
emacs
newest-history-eol
\^[<
コマンド履歴の中で最も新しいコマンドに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの末尾に移動します。
return-history-eol
コマンド履歴のどのコマンドにも対応しない新規バッファに移動します。引数を与えるとそれを履歴番号とみなしてその番号のコマンドに移動します。カーソルはバッファの末尾に移動します。
emacs
next-history
\^[>
コマンド履歴の中で次のコマンドに移動します。カーソルの位置は変わりません。
prev-history
コマンド履歴の中で前のコマンドに移動します。カーソルの位置は変わりません。
next-history-bol
コマンド履歴の中で次のコマンドに移動します。カーソルはバッファの先頭に移動します
vi-command
prev-history-bol
j, +, \D,
\^N
コマンド履歴の中で前のコマンドに移動します。カーソルはバッファの先頭に移動します
vi-command
next-history-eol
k, -, \U,
\^P
コマンド履歴の中で次のコマンドに移動します。カーソルはバッファの末尾に移動します
vi-insert, emacs
prev-history-eol
\D, \^N
コマンド履歴の中で前のコマンドに移動します。カーソルはバッファの末尾に移動します
vi-insert, emacs
search-again
\U, \^P
最後に行ったコマンド履歴検索をもう一度行います。
vi-command
search-again-rev
n
最後に行ったコマンド履歴検索を方向を逆にしてもう一度行います。
vi-command
search-again-forward
N
最後に行ったコマンド履歴検索を順方向にもう一度行います。
search-again-backward
最後に行ったコマンド履歴検索を逆方向にもう一度行います。
beginning-search-forward
コマンド履歴を順方向に検索し、バッファの先頭から現在のカーソル位置までの間にある文字列が同じ次のコマンドに移動します。カーソル位置は変わりません。
beginning-search-backward
コマンド履歴を逆方向に検索し、バッファの先頭から現在のカーソル位置までの間にある文字列が同じ前のコマンドに移動します。カーソル位置は変わりません。
srch-self-insert
入力した文字を検索用バッファに挿入します。(エスケープシーケンスによるエスケープの対象となる文字は挿入できません)
vi-search, emacs-search
srch-backward-delete-char
\\
検索用バッファの最後の一文字を削除します。検索用バッファが空の場合は:
srch-backward-delete-line
•vi
風編集モードでは
srch-abort-search
コマンドと同じ動作をします。
•emacs
風編集モードでは alert
コマンドと同じ動作をします。
vi-search, emacs-search
\B, \?, \^H
検索用バッファの内容を全て削除します。
vi-search, emacs-search
srch-continue-forward
\$, \^U
現在表示している暫定検索結果の次の結果を順方向に探します。
emacs-search
srch-continue-backward
\^S
現在表示している暫定検索結果の次の結果を逆方向に探します。
emacs-search
srch-accept-search
\^R
検索を終了し、現在表示している暫定検索結果を確定します。検索結果に移動します。
vi-search
srch-abort-search
\^J, \^M
emacs-search
\^J, \^[
検索を中止し、検索を開始する前の状態に戻ります。
vi-search
\^[
emacs-search
\^G
エスケープシーケンス
Bindkey コマンドで行編集のキー設定を表示・設定する際、ファンクションキーなどの特殊なキーはエスケープシーケンスで表わします。エスケープシーケンスは全てバックスラッシュ ( \) で始まります。またバックスラッシュそのものもエスケープの対象です。エスケープシーケンスに対するキーの割り当ては以下の通りです。 \\バックスラッシュ
( \)
\B
Backspace
\D
↓矢印キー
\E
End
\H
Home
\I
Insert (Insert-char, Enter-insert-mode)
\L
←矢印キー
\N
Page-down (Next-page)
\P
Page-up (Previous-page)
\R
→矢印キー
\U
↑矢印キー
\X
Delete
\!
INTR
\#
EOF
\$
KILL
\?
ERASE
\^@
Ctrl + @
\^A, \^B, ..., \^Z
Ctrl + A, Ctrl + B, ..., Ctrl + Z
※ Ctrl + I は Tab、Ctrl + J は Newline、Ctrl + M
は Carriage-return です。
\^[
Ctrl + [ (Escape)
\^\
Ctrl + \
\^]
Ctrl + ]
\^^
Ctrl + ^
\^_
Ctrl + _
\^?
Ctrl + ? (Delete)
\F00, \F01, ..., \F63
F0, F1, ..., F63
\a1
キーパッドの左上キー
\a3
キーパッドの右上キー
\b2
キーパッドの中央キー
\bg
Beginning
\bt
Back-tab
\c1
キーパッドの左下キー
\c3
キーパッドの右下キー
\ca
Clear-all-tabs
\cl
Close
\cn
Cancel
\co
Command
\cp
Copy
\cr
Create
\cs
Clear-screen または
erase
\ct
Clear-tab
\dl
Delete-line
\ei
Exit-insert-mode
\el
Clear-to-end-of-line
\es
Clear-to-end-of-screen
\et
Enter (Send)
\ex
Exit
\fd
Find
\hp
Help
\il
Insert-line
\ll
Home-down
\me
Message
\mk
Mark
\ms
マウスイベント
\mv
Move
\nx
Next-object
\on
Open
\op
Options
\pr
Print (Copy)
\pv
Previous-object
\rd
Redo
\re
Resume
\rf
Ref (Reference)
\rh
Refresh
\rp
Replace
\rs
Restart
\sf
Scroll-forward (Scroll-down)
\sl
Select
\sr
Scroll-backward (Scroll-up)
\st
Set-tab
\su
Suspend
\sv
Save
\ud
Undo
\SE
Shift + End
\SH
Shift + Home
\SI
Shift + Insert
\SL
Shift +
←矢印キー
\SR
Shift +
→矢印キー
\SX
Shift + Delete
\Sbg
Shift + Beginning
\Scn
Shift + Cancel
\Sco
Shift + Command
\Scp
Shift + Copy
\Scr
Shift + Create
\Sdl
Shift + Delete-line
\Sel
Shift + End-of-line
\Sex
Shift + Exit
\Sfd
Shift + Find
\Shp
Shift + Help
\Smg
Shift + Message
\Smv
Shift + Move
\Snx
Shift + Next
\Sop
Shift + Options
\Spr
Shift + Print
\Spv
Shift + Previous
\Srd
Shift + Redo
\Sre
Shift + Resume
\Srp
Shift + Replace
\Ssu
Shift + Suspend
\Ssv
Shift + Save
\Sud
Shift + Undo
コマンドライン補完
行編集でコマンドを入力している途中で Tab キーを押すことで、コマンドの名前やオプション、引数を補完することができます。コマンド名やファイル名を途中まで打ち込んだところで Tab キーを押すと、その名前に一致するコマンド名やファイル名の一覧が現れます。さらに続けて Tab キーを押すと、入力したい名前を一覧の中から選ぶことができます。(一致する名前が一つしかない場合は、一覧は現れず、直接名前がコマンドラインに入力されます。)関数 completion//command
が定義されている場合は、それを補完関数として実行します。定義されていない場合は、入力中の単語をコマンド名として補完します。
コマンドの引数
関数 completion//argument
が定義されている場合は、それを補完関数として実行します。定義されていない場合は、入力中の単語をファイル名として補完します。
空白文字・タブ・改行の三文字
(シェル起動時のデフォルト)
WORDS
既に入力されているコマンド名とコマンドの引数を含む配列です。コマンド名を補完しようとしているときは、この配列は空になります。
TARGETWORD
現在補完を行おうとしている、途中まで入力されたコマンド名またはコマンドの引数です。
コマンドライン推定
コマンドライン推定は実験的な機能です。Le-predict オプションが有効なとき、行編集で入力したコマンドの部分に続けて入力されそうなコマンド文字列を推定します。POSIX 準拠モード
Yash は基本的に POSIX.1-2008 のシェルの規定に従って動作しますが、利便性や分かりやすさのために POSIX の規定とは異なる動作をする点もあります。そのため標準状態の yash は POSIX の規定するシェルとして供するには向きません。 POSIX 準拠モードを有効にすると、yash はできる限り POSIX の規定通りに動作するようになります。POSIX 準拠シェルとしての互換性が必要な場面では、POSIX 準拠モードを有効にしてください。•シェルの起動時の初期化で読み込むスクリプトファイルが異なります。
•シェルが
-c
オプションで起動された場合、構文エラー時に
yash -c の代わりに sh -c
をファイル名として表示します。
•グローバルエイリアスの置換を行いません。
•複合コマンドのグルーピングや
if
文の内容が空の場合エラーになります。
•For
ループで展開した単語は
for-local
オプションに関係なくグローバル変数として代入します。変数名はポータブルな
(すなわち ASCII
の範囲内の)
文字しか使えません。
•Case
文の最初のパターンを
esac
にすることはできません。
•予約語 !
の直後に空白を置かずに
(
を置くことはできません。
•二重ブラケットコマンドは使えません。
•予約語
function
を用いる形式の関数定義構文は使えません。関数名はポータブルな
(すなわち ASCII
の範囲内の)
文字しか使えません。
•単純コマンドでの配列の代入はできません。
•シェル実行中に
LC_CTYPE
変数の値が変わっても、それをシェルのロケール情報に反映しません。
•RANDOM
変数は使えません。
•チルダ展開で
~ と ~ユーザ名
以外の形式の展開が使えません。
•パラメータ展開の入れ子はできません。またインデックスおよび単語2のある加工指定は使用できません。
•$( と )
で囲んだコマンド置換に含まれるコマンドは、コマンド置換が実行される時に毎回解析されます。
•数式展開で小数ならびに
++ および --
演算子が使えません。数値でない変数は常にエラーになります。
•リダイレクトの対象を示すトークンは次のリダイレクトのファイル記述子を示す整数と紛らわしくないようにしなければなりません。
•リダイレクトを伴う複合コマンドの直後に
} や fi
などの予約語を置くことはできません。
•ファイルのリダイレクトで、パス名展開の結果が一つでない場合、すぐにはエラーにせず、パス名展開を行わなかったときと同様に扱います。
•<&
および >&
リダイレクト演算子の対象となるファイル記述子はそれぞれ読み込み可能および書き込み可能でなければなりません。
•ソケットリダイレクト・ヒアストリング・パイプリダイレクト・プロセスリダイレクトは使用できません。
•単純コマンドの実行時、コマンドが見つからなくても
COMMAND_NOT_FOUND_HANDLER
変数の値は実行しません。
•コマンドの検索において通常の組込みコマンドは対応する外部コマンドがないと見つかりません。
•いくつかの組込みコマンドで特定のオプションが使えなくなるなど挙動が変わります。特に、長いオプションは使えなくなります。
•対話モードでないとき、特殊組込みコマンドのオプションやオペランドの使い方が間違っているとシェルは直ちに終了します。また特殊組込みコマンドで代入エラーやリダイレクトエラーが発生したときも直ちに終了します。
•対話モードのプロンプトを出す前に
PROMPT_COMMAND
変数の値を実行しません。
PS1 変数・PS2
変数・PS4
変数の値の解釈の仕方が違います。
YASH_PS1 など YASH_
で始まる名前のプロンプト変数は使用されません。
•メールチェックにおいて、ファイルが更新されている場合はファイルが空でも新着メールメッセージを出力します。
よくある質問 / 困ったときは
Unicode (非 ASCII) 文字を使うには?
Unicode 文字を使えるようにするにはロケール環境変数の設定が必要です。$ locale LANG=ja_JP.utf8 LC_CTYPE="ja_JP.utf8" LC_NUMERIC="ja_JP.utf8" LC_TIME="ja_JP.utf8" LC_COLLATE="ja_JP.utf8" LC_MONETARY="ja_JP.utf8" LC_MESSAGES="ja_JP.utf8" LC_PAPER="ja_JP.utf8" LC_NAME="ja_JP.utf8" LC_ADDRESS="ja_JP.utf8" LC_TELEPHONE="ja_JP.utf8" LC_MEASUREMENT="ja_JP.utf8" LC_IDENTIFICATION="ja_JP.utf8" LC_ALL=
export LC_ALL=ja_JP.utf8
行編集が動かない
まず、 echo $TERM を実行して出力される値が正常かどうか調べてください。値が xterm なら、おそらくどんな環境でも最低限の機能は使えるはずです。 xterm-16color などの色が使えるバージョンや、 rxvt や vt100 などの他の端末機種も大概は動きます。利用可能な全ての値を列挙するには toe コマンドを使用してください。 お使いの端末機種に合った値を設定するのが理想ですが、yash を実行しようとしている環境がその端末機種に対応していない場合はうまく動かないかもしれません。その場合は、 export TERM=xterm などを実行して TERM の値を変えてみてください。構文の形式的定義
ここにプログラミング言語としてのシェルの構文定義を示します。トークン分割
入力ソースコードの文字列はまずトークンに分割されます。トークンはソースコード内のより先に現れるトークンができるだけ長くなるように分割します。一つ以上の空白 (blank) 文字の連なりはトークンを分割します。(WordElement / !SpecialChar .)+
WordElement
\ . /
' (! ' .)* ' /
" QuoteElement* " /
Parameter /
Arithmetic /
CommandSubstitution
QuoteElement
\ ([ $`"\] /
<改行>) /
Parameter /
Arithmetic /
CommandSubstitutionQuoted /
![ `"\] .
Parameter
$ [ @*#?-$! [:digit:]] /
$ PortableName /
$ ParameterBody
PortableName
![0-9] [0-9
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]+
ParameterBody
{ ParameterNumber? (ParameterName /
ParameterBody / $ ParameterBody / Arithmetic / CommandSubstitution)
ParameterIndex? ParameterMatch? }
ParameterNumber
# ![ }+=:/%] !([-?#]
!})
ParameterName
[@*#?-$!] /
[[:alnum:] _]+
ParameterIndex
[ ParameterIndexWord ( ,
ParameterIndexWord)? ]
ParameterIndexWord
(WordElement / ![ "'],] .)+
ParameterMatch
:? [-+=?] ParameterMatchWord /
( # / ## / % / %%) ParameterMatchWord /
( :/ / / [ #%/]?) ParameterMatchWordNoSlash ( /
ParameterMatchWord)?
ParameterMatchWord
(WordElement / ![ "'}] .)*
ParameterMatchWordNoSlash
(WordElement / ![ "'/}] .)*
Arithmetic
$(( ArithmeticBody* ))
ArithmeticBody
\ . /
Parameter /
Arithmetic /
CommandSubstitution /
( ArithmeticBody ) /
![ `()] .
CommandSubstitution
$( CompleteProgram ) /
` CommandSubstitutionBody* `
CommandSubstitutionQuoted
$( CompleteProgram ) /
` CommandSubstitutionBodyQuoted* `
CommandSubstitutionBody
\ [ $`\] /
! ` .
CommandSubstitutionBodyQuoted
\ [ $`\`] /
! ` .
SpecialChar
[|&;<>()`\"' [:blank:]]
/ <改行>
AssignmentPrefix Word
AssignmentPrefix
Name =
Name
![[:digit:]] \[[:alnum:] _]+
# (!<改行> .)*
構文
トークンが分割された後、その結果であるトークンの並びは以下に示す文脈自由文法によって解析されます。(以下、 * と + と ? は正規表現と同様の意味を持ちます) CompleteProgramNL* | CompoundList
CompoundList
NL* AndOrList (( ; | & | NL)
CompleteProgram)?
AndOrList
Pipeline (( && | ||) NL*
Pipeline)*
Pipeline
!? Command ( | NL*
Command)*
Command
CompoundCommand Redirection* |
FunctionDefinition |
SimpleCommand
CompoundCommand
Subshell |
Grouping |
IfCommand |
ForCommand |
WhileCommand |
CaseCommand |
DoubleBracketCommand |
FunctionCommand
Subshell
( CompoundList )
Grouping
{ CompoundList }
IfCommand
if CompoundList then
CompoundList ( elif CompoundList then CompoundList)* (
else CompoundList)? fi
ForCommand
for Name ((NL* in Word*)? (
; | NL) NL*)? do CompoundList done
WhileCommand
(while | until) CompoundList
do CompoundList done
CaseCommand
case Word NL* in NL* CaseList?
esac
CaseList
CaseItem ( ;; NL* CaseList)?
CaseItem
(? Word ( | Word)* )
CompleteProgram
DoubleBracketCommand
[[ Ors ]]
Ors
Ands ( || Ands)*
Ands
Nots ( && Nots)*
Nots
!* Primary
Primary
(-b | -c | -d | -e
| -f | -G | -g | -h | -k | -L |
-N | -n | -O | -o | -p | -r |
-S | -s | -t | -u | -w | -x |
-z) Word |
Word ( -ef | -eq | -ge | -gt | -le |
-lt | -ne | -nt | -ot | -veq | -vge
| -vgt | -vle | -vlt | -vne | = | ==
| === | =~ | != | !== | < | >)
Word |
( Ors ) |
Word
FunctionCommand
function Word ( ( ))? NL*
CompoundCommand Redirection*
FunctionDefinition
Name ( ) NL* CompoundCommand
Redirection*
SimpleCommand
(Assignment | Redirection) SimpleCommand? |
Word (Word | Redirection)*
Assignment
AssignmentWord |
AssignmentPrefix ( NL* (Word NL*)* )
Redirection
IO_NUMBER? RedirectionOperator Word |
IO_NUMBER? <( CompleteProgram ) |
IO_NUMBER? >( CompleteProgram )
RedirectionOperator
< | <> | > |
>| | >> | >>| | <& |
>& | << | <<- |
<<<
NL
<改行>
•単語が SimpleCommand
の Word
として解析されようとした時に、通常のエイリアス及びグローバルエイリアスを対象として置換が試みられます。
•置換結果が空白文字
(blank)
で終わるエイリアス置換の次に単語トークンがある場合、その単語も通常のエイリアス及びグローバルエイリアスを対象として置換が試みられます。
•その他の単語は、グローバルエイリアスのみを対象として置換が試みられます。(POSIX
準拠モードを除く)
ALIAS 組込みコマンド
Alias 組込みコマンドはエイリアスを設定・表示します。構文
•alias [-gp]
[エイリアス名
[=値]...]
説明
Alias コマンドはエイリアスをオペランドに従って設定または表示します。表示は、コマンド (の一部) として解釈可能な形式で標準出力に出力します。オペランドを一つも与えない場合、alias コマンドは現在設定されている全てのエイリアスを表示します。オプション
-g, --globalこのオプションを指定した場合、設定するエイリアスはグローバルエイリアスになります。このオプションを指定しない場合、設定するエイリアスは通常のエイリアスになります。
-p, --prefix
このオプションは表示の書式を選択します。このオプションを指定した場合、alias
コマンドとそのコマンドライン引数全てを表示します。このオプションを指定しない場合、alias
コマンドに渡すオペランドだけを表示します。
オペランド
エイリアス名表示するエイリアスの名前です。
エイリアス名=値
設定するエイリアスの名前とその内容です。
終了ステータス
エラーがない限り alias コマンドの終了ステータスは 0 です。補足
Yash でエイリアスの名前として使えない文字は、空白文字・タブ・改行、および =$<>\'"`;&|()# の各文字です。エイリアスの内容にはすべての文字が使えます。ARRAY 組込みコマンド
Array 組込みコマンドは配列の表示や操作を行います。構文
•array
•array
配列名
[値...]
•array -d
配列名
[インデックス
...]
•array -i
配列名
インデックス
[値...]
•array -s
配列名
インデックス
値
説明
オプションもオペランドも指定せずに実行すると、array コマンドは全ての配列の定義を (コマンドとして解釈可能な形式で) 標準出力に出力します。オプション
-d, --delete配列の要素を削除します。
-i, --insert
配列に要素を挿入します。
-s, --set
配列の要素を変更します。
オペランド
配列名表示または操作する配列の名前です。
インデックス
配列の要素を指定する自然数です。インデックスは最初の要素から順に
1, 2, 3, ...
と割り振られます。
値
配列の要素となる文字列です。
終了ステータス
エラーがない限り array コマンドの終了ステータスは 0 です。補足
POSIX には array コマンドに関する規定はありません。BG 組込みコマンド
Bg 組込みコマンドはジョブをバックグラウンドで実行します。構文
•bg
[ジョブ ...]
説明
Bg コマンドはジョブをバックグラウンドで実行します。ジョブには SIGCONT シグナルが送られ、ジョブが停止している場合は再開されます。オペランド
ジョブ実行するジョブのジョブ
ID。
ジョブを複数指定することもできます。何も指定しないと現在のジョブを実行します。
非 POSIX
準拠モードではジョブ
ID の先頭の %
は省略できます。
終了ステータス
エラーがない限り bg コマンドの終了ステータスは 0 です。補足
Bg コマンドは準特殊組込みコマンドです。BINDKEY 組込みコマンド
Bindkey 組込みコマンドは行編集におけるキーバインド設定を表示・設定します。構文
•bindkey -aev
[キー
[コマンド ]]
•bindkey -l
説明
-l (--list) オプションを付けて実行すると、bindkey コマンドはキーバインド設定で利用可能な行編集コマンドの一覧を標準出力に出力します。•オペランドとしてキー・コマンドを与えない場合、現在のキーバインド設定の内容を
(コマンドとして解釈可能な形式で)
標準出力に出力します。
•キーのみを与えると、そのキーに対する現在の設定だけを出力します。
•キーとコマンドを両方与えると、そのキーを入力したときに実行するコマンドを指定したコマンドに設定します。
オプション
-a, --vi-commandVi
風編集モードのコマンドモードにおけるキーバインドを表示・設定します。
-e, --emacs
Emacs
風編集モードにおけるキーバインドを表示・設定します。
-v, --vi-insert
Vi
風編集モードの挿入モードにおけるキーバインドを表示・設定します。
オペランド
キー表示・設定する対象のキー入力シーケンスです。このオペランドの値にはバックスラッシュで始まるエスケープシーケンスが利用できます。
コマンド
設定する行編集コマンドです。ハイフン一つ
( -)
を指定すると、指定した
キーに対する設定を削除します。
終了ステータス
エラーがない限り bindkey コマンドの終了ステータスは 0 です。補足
Bindkey コマンドは準特殊組込みコマンドです。 POSIX では bindkey コマンドの動作は規定されていません。BREAK 組込みコマンド
Break 組込みコマンドは実行中のループを中断します。構文
•break
[深さ ]
•break -i
説明
-i (--iteration) オプションを付けずに実行すると、break コマンドは現在実行中の for ループまたは while ループまたは until ループを中断します。多重ループの中で実行した場合、内側から数えて 深さ番目のループを中断します。深さが指定されていないときは、最も内側のループを中断します ( 深さ = 1)。指定された深さが実際に実行している多重ループの深さより大きい場合は最も外側のループを中断します。オプション
-i, --iterationループではなく反復実行を中断します。
オペランド
nest内側から何番目のループを中断するのかを指定する
1
以上の自然数です。
終了ステータス
ループの中断に成功すると終了ステータスは 0 です。反復実行の中断に成功すると break コマンドの直前に実行されたコマンドの終了ステータスが break コマンドの終了ステータスになります。補足
Break コマンドは特殊組込みコマンドです。•ループの中で関数が実行され、その中で
break
コマンドが実行される
•ループの実行中にトラップが実行され、その中で
break
コマンドが実行される
CD 組込みコマンド
Cd 組込みコマンドはシェルの作業ディレクトリを変更します。構文
•cd [-L|-P]
[ディレクトリ
]
説明
Cd コマンドはシェルの作業ディレクトリをオペランドで指定したディレクトリに変更します。オプション
-L, --logicalディレクトリパスに含まれるシンボリックリンクを解決せずに新しい作業ディレクトリを決定します。新しい
PWD
変数の値にはシンボリックリンクになっているパス名コンポーネントがそのまま残ります。
-P, --physical
ディレクトリパスに含まれるシンボリックリンクを解決します。新しい
PWD
変数の値はシンボリックリンクを含みません。
--default-directory=ディレクトリ
ディレクトリオペランドが与えられていない場合は、代わりにこのオプションで指定したディレクトリを新しい作業ディレクトリとします。
オペランド
ディレクトリ新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで指定します。
この値がハイフン一つ
(「-」) の場合、 OLDPWD
変数の値が指定されたものとみなします。このオペランドが与えられていない場合、
HOME
変数の値が指定されたものとみなします
( --default-directory
オプションを指定した場合を除く)。
終了ステータス
作業ディレクトリを正しく変更できた場合、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
Cd コマンドは準特殊組込みコマンドです。コロン組込みコマンド
コロン組込みコマンドは何も行わない組込みコマンドです。構文
•:
[引数 ...]
説明
コロンコマンドは何も行いません。コマンドライン引数は一切無視します。終了ステータス
コロンコマンドの終了ステータスは 0 です。補足
コロンコマンドは特殊組込みコマンドです。COMMAND 組込みコマンド
Command 組込みコマンドはコマンドを実行します。またコマンドの種類を特定します。構文
•command [-befp]
コマンド
[引数 ...]
•command -v|-V [-abefkp]
コマンド...
説明
-v (--identify) オプションならびに -V ( --verbose-identify) オプションを付けずに実行すると、command コマンドは与えられた コマンドを与えられた引数で実行します。コマンドの実行の仕方は単純コマンドの実行の最後のステップに準じますが、コマンドの検索では外部コマンド・組込みコマンド・関数の内オプションで指定したものしか検索しません。またコマンドが特殊組込みコマンドの場合、コマンドのオプションやオペランドの使い方が間違っていたりリダイレクトエラーや代入エラーが起きたりしてもシェルは終了しません。•コマンドの検索の結果見つかったコマンドおよびその他の外部コマンドは、その絶対パスを出力します。
•コマンドの検索によらず実行される組込みコマンドや関数は、単にその名前を出力します。
•予約語は、単にその名前を出力します。
•エイリアスは、コマンドとして実行可能な形式でその名前と値を出力します。
•コマンドが見つからなかった場合は、何も出力しません。(終了ステータスが非
0 になります)
オプション
-a, --alias
コマンドとしてエイリアスを検索の対象にします。
-v ( --identify) または -V (
--verbose-identify)
オプションと一緒に使う必要があります。
-b, --builtin-command
コマンドとして組込みコマンドを検索の対象にします。
-e, --external-command
コマンドとして外部コマンドを検索の対象にします。
-f, --function
コマンドとして関数を検索の対象にします。
-k, --keyword
コマンドとして予約語を検索の対象にします。
-v ( --identify) または -V (
--verbose-identify)
オプションと一緒に使う必要があります。
-p, --standard-path
コマンドの検索において、PATH
変数の代わりに、標準のコマンドをすべて含むようなシステム固有のデフォルトパスを用いて外部コマンドを検索します。
-v, --identify
与えられたコマンドの種類とパスを特定し、簡単な形式で標準出力に出力します。
-V, --verbose-identify
与えられたコマンドの種類とパスを特定し、人間にとって読みやすい形式で標準出力に出力します。
-b -e
-v (--identify) または -V
(--verbose-identify)
オプションを指定しているとき
-a -b -e -f -k
オペランド
コマンド実行するまたは種類を特定するコマンドの名前です。
引数...
実行するコマンドに渡すコマンドライン引数です。
終了ステータス
-v (--identify) あるいは -V (--verbose-identify) オプションを指定していないとき実行したコマンドの終了ステータス
-v (--identify) または -V
(--verbose-identify)
オプションを指定しているとき
エラーがない限り
0
補足
Command コマンドは準特殊組込みコマンドです。COMPLETE 組込みコマンド
Complete 組込みコマンドはコマンドライン補完において補完候補を生成します。この組込みコマンドは補完関数の実行中にだけ使えます。構文
•complete [-A
パターン ] [-R
パターン ] [-T] [-P
接頭辞] [-S
接尾辞 ] [-abcdfghjkuv] [[-O] [-D
説明]
単語...]
説明
補完関数の中でこの組込みコマンドを実行すると、complete コマンドは指定した引数に従って補完候補を生成します。どのオプション・オペランドで候補を生成するにせよ、実際に生成される候補は現在補完しようとしている (コマンドライン上に途中まで入力された) 単語に一致するものに限られます。オプション
-A パターン, --accept= パターンこのオプションを指定すると、指定したパターンにマッチする候補だけを生成します。このオプションは複数回指定できます
(指定した全ての
パターンにマッチする候補だけを生成します)。
-D 説明,
--description=説明
このオプションを指定すると、このオプションで指定した説明が補完の際に候補の説明として表示されます。
-O, --option
生成する候補をコマンドのオプションとみなすようにします。候補を画面上に一覧表示する際に自動的に先頭にハイフンを付加します。
-P 接頭辞,
--prefix=接頭辞
このオプションで指定する接頭辞は現在補完しようとしている単語の接頭辞になっていなければなりません。このオプションを指定すると、候補生成の際にこのオプションで指定した接頭辞を無視してマッチングを行います。例えば補完しようとしている単語が
file:///home/user/docume
であり、この URL
をファイル名として補完したいとしましょう。この場合は、
complete -P file:// -f とすると URL
から file://
を除いた残りの
/home/user/docume
の部分に対してファイル名としての補完候補が生成されます。
-R パターン,
--reject= パターン
このオプションを指定すると、指定したパターンにマッチする候補を生成しません。このオプションは複数回指定できます
(指定した
パターンの少なくとも一つにマッチする候補を全て除外します)。
-S 接尾辞,
--suffix=接尾辞
生成した各候補の末尾に接尾辞を付加します。
-T, --no-termination
通常は、補完が終わった後に次の単語をすぐ入力できるように、補完した単語の直後に空白を自動的に挿入しますが、このオプションを指定したときは空白を挿入しません。
-a, --alias
-d (--directory)
オプションを指定せずに
-f (--file)
オプションを指定した場合、
-S ... (--suffix=...)
オプションの指定の有無にかかわらず、ディレクトリ名を表す補完候補には接尾辞としてスラッシュが付き、候補の直後には空白が入りません
( -S / -T
を指定したときと同じ動作)。
ジョブ ID
の補完は先頭の %
を除いた部分に対して行われるので、補完しようとしている単語が既に
%
を含んでいる場合は
%
を接頭辞として指定してください。
エイリアス (
--normal-alias --global-alias に同じ)
--array-variable
配列
--bindkey
Bindkey
コマンドで利用可能な行編集コマンド
-b, --builtin-command
組込みコマンド
( --special-builtin --semi-special-builtin --regular-builtin
に同じ)
-c, --command
コマンド
(--builtin-command --external-command --function
に同じ)
-d, --directory
ディレクトリ
--dirstack-index
ディレクトリスタックのインデックス
--executable-file
実行可能ファイル
--external-command
外部コマンド
-f, --file
ファイル
(ディレクトリ含む)
--finished-job
終了したジョブのジョブ
ID
--function
関数
--global-alias
グローバルエイリアス
-g, --group
(ファイルのパーミッションなどにおける)
グループ
-h, --hostname
ホスト名
-j, --job
ジョブ ID
-k, --keyword
シェルの予約語
--normal-alias
通常の
(グローバルでない)
エイリアス
--regular-builtin
通常の組込みコマンド
--running-job
実行中のジョブのジョブ
ID
--scalar-variable
(配列を除いた通常の)
変数
--semi-special-builtin
準特殊組込みコマンド
--signal
シグナル
--special-builtin
特殊組込みコマンド
--stopped-job
停止中のジョブのジョブ
ID
-u, --username
ユーザのログイン名
-v, --variable
変数
オペランド
Complete コマンドのオペランドは、各オペランドがそれぞれ補完候補として扱われます。指定したオペランドのうち、現在補完しようとしている単語に合うものが補完候補となります。終了ステータス
候補が少なくとも一つ生成できた場合は、終了ステータスは 0 です。新たな候補が一つも生成できなかったときは、終了ステータスは 1 です。その他のエラーの場合は 2 以上の終了ステータスになります。補足
Complete コマンドは準特殊組込みコマンドです。 POSIX では complete コマンドの動作は規定されていません。CONTINUE 組込みコマンド
Continue 組込みコマンドは実行中のループの次の繰り返しに処理を移します。構文
•continue
[深さ ]
•continue -i
説明
-i (--iteration) オプションを付けずに実行すると、continue コマンドは現在実行中の for ループまたは while ループまたは until ループの繰り返しを中断し、直ちに次の繰り返しを開始します (while/until ループについては、ループの実行条件の判定からやり直します)。多重ループの中で実行した場合、内側から数えて 深さ番目のループに対してこの動作を行います。深さが指定されていないときは、最も内側のループに対してこの動作を行います ( 深さ = 1)。指定された深さが実際に実行している多重ループの深さより大きい場合は最も外側のループに対してこの動作を行います。オプション
-i, --iterationループではなく反復実行に対して作用します。
オペランド
深さ内側から何番目のループに作用するのかを指定する
1
以上の自然数です。
終了ステータス
-i (--iteration) オプションが指定されていないとき、continue コマンドの処理が成功すると終了ステータスは 0 です。 -i (--iteration) オプションが指定されているとき、continue コマンドの処理が成功すると continue コマンドの直前に実行されたコマンドの終了ステータスが continue コマンドの終了ステータスになります。補足
Continue コマンドは特殊組込みコマンドです。•ループの中で関数が実行され、その中で
continue
コマンドが実行される
•ループの実行中にトラップが実行され、その中で
continue
コマンドが実行される
DIRS 組込みコマンド
Dirs 組込みコマンドはディレクトリスタックの内容を表示します。構文
•dirs [-cv]
[インデックス
..]
説明
ディレクトリスタックとは、作業ディレクトリの変更の履歴をとる仕組みです。Pushd コマンドで作業ディレクトリを変更すると、元の作業ディレクトリがディレクトリスタックに追加されます。Popd コマンドを使うと、ディレクトリスタックに保存してある元の作業ディレクトリに戻ることができます。Dirs コマンドを使うと、ディレクトリスタックの内容を表示することができます。ディレクトリスタックの内容は DIRSTACK 配列と PWD 変数に保存されます。これらの値を変更すると、ディレクトリスタックの動作に影響します。オプション
-c, --clearディレクトリスタックの要素を
(現在の作業ディレクトリに対応するものを除いて)
すべて削除します。
-v, --verbose
ディレクトリスタックの要素のインデックスも出力します。
オペランド
インデックス表示するディレクトリスタックの要素のインデックスです。インデックスを一つも指定しないときは、全ての要素をインデックス
+0
のものから順に表示します。
終了ステータス
エラーがない限り dirs コマンドの終了ステータスは 0 です。補足
Dirs コマンドは準特殊組込みコマンドです。 POSIX では dirs コマンドの動作は規定されていません。DISOWN 組込みコマンド
Disown 組込みコマンドはジョブを削除します。構文
•disown [-a]
[ジョブ ...}
説明
Disown コマンドはシェルが管理しているジョブを削除します。削除したジョブはジョブ制御の対象から外れますが、ジョブを構成するコマンドの実行は継続します。オプション
-a, --all全てのジョブを削除します。
オペランド
ジョブ削除するジョブのジョブ
ID。
複数指定することもできます。何も指定しないと現在のジョブを削除します。非
POSIX
準拠モードではジョブ
ID の先頭の %
は省略できます。
終了ステータス
エラーがない限り disown コマンドの終了ステータスは 0 です。補足
Disown コマンドは準特殊組込みコマンドです。 POSIX では disown コマンドの動作は規定されていません。ドット組込みコマンド
ドット組込みコマンドはテキストファイルを開いて、その内容をコマンドとして解釈し実行します。構文
•. [-AL]
ファイル名
[引数 ...]
説明
ドットコマンドは与えられた ファイル名のファイルを開き、その内容をコマンドとして解釈し現在のコマンド実行環境で実行します。オプション
-A, --no-aliasファイルを読み込んで実行する際、エイリアス展開を行いません。
-L, --autoload
ファイル名がスラッシュを含んでいるかどうかにかかわらず、PATH
変数の代わりに YASH_LOADPATH
変数を検索して開くべきファイルを探します。
ファイル名は現在の作業ディレクトリからの相対パス名とはみなしません。
オペランド
ファイル名読み込むファイルのパス名です。
引数...
ファイルの内容を実行している間に位置パラメータに設定する文字列です。
終了ステータス
ドットコマンドの終了ステータスは、ファイルから読み込んで実行した最後のコマンドの終了ステータスです。ファイルの内容に一つもコマンドが入っていなかったときは終了ステータスは 0 です。ファイルが見つからなかったり開けなかったりしたときは終了ステータスは非 0 です。補足
ドットコマンドは特殊組込みコマンドです。ECHO 組込みコマンド
Echo 組込みコマンドはコマンドライン引数を標準出力に出力します。構文
•echo
[文字列 ...]
説明
Echo コマンドは与えられたコマンドライン引数と改行を標準出力に出力します。引数がない場合は改行だけを出力します。引数が複数ある場合はそれぞれを空白文字で区切って出力します。ベル文字 (ASCII
コード番号 7)
\b
バックスペース
(ASCII コード番号 8)
\c
これ以降何も出力しない。
\e
エスケープ文字
(ASCII コード番号 27)
\f
フォームフィード
(ASCII コード番号 12)
\n
改行文字 (ASCII
コード番号 10)
\r
復帰文字 (ASCII
コード番号 13)
\t
水平タブ (ASCII
コード番号 9)
\v
垂直タブ (ASCII
コード番号 11)
\\
バックスラッシュ
\0xxx
八進数 xxx
(最大三桁)
で表わされるコード番号の文字
オプションは一切解釈しません。常にエスケープシーケンスを解釈します。
BSD
-n
オプションを解釈します。エスケープシーケンスは一切解釈しません。
GNU
-n, -e, -E
オプションを解釈します。エスケープシーケンスは
-e
オプションを指定したときだけ解釈します。
ZSH
-n, -e, -E
オプションを解釈します。エスケープシーケンスは
-E
オプションを指定しないかぎり解釈します。
DASH
-n
オプションを解釈します。常にエスケープシーケンスを解釈します。
RAW
オプションもエスケープシーケンスも一切解釈しません。
オプション
-n最後に改行を出力しないようにする。
-e
エスケープシーケンスを解釈するようにする。
-E
エスケープシーケンスを解釈せず、全ての文字をそのまま出力するようにする。
終了ステータス
エラーがない限り echo コマンドの終了ステータスは 0 です。補足
POSIX には ECHO_STYLE 変数およびオプションに関する規定はありません。POSIX では、 -n オプションが指定されたときまたは引数にバックスラッシュが含まれている場合の動作を規定していません。可搬性のあるシェルスクリプトを書くには、echo コマンドよりも printf コマンドの使用を推奨します。EVAL 組込みコマンド
Eval 組込みコマンドはオペランドをコマンドとして解釈して実行します。構文
•eval [-i]
[コマンド ...]
説明
Eval コマンドは、与えられたオペランドをシェルのコマンドとして解釈し、現在のコマンド実行環境で実行します。オプション
-i, --iteration与えられたコマンドを順に反復実行します。
オペランド
コマンドコマンドとして解釈・実行する文字列です。
終了ステータス
オペランドが一つもない場合またはオペランドの中にコマンドが一つも含まれていなかった場合、終了ステータスは 0 です。コマンドが一つ以上解釈・実行された場合、最後に実行したコマンドの終了ステータスが eval コマンドの終了ステータスになります。補足
Eval コマンドは特殊組込みコマンドです。EXEC 組込みコマンド
Exec 組込みコマンドはシェルのプロセスを別の外部コマンドに置き換えます。またシェルのプロセスに対してリダイレクトを実行します。構文
•exec [-cf] [-a
コマンド名 ]
[コマンド
[引数 ...]]
説明
Exec コマンドを コマンドを指定して実行すると、シェルは単純コマンドの実行の最後のステップと同様にしてコマンドを実行します。ただし、コマンドは必ず外部コマンドとしてみなされ、関数や組込みコマンドは無視します。そしてその外部コマンドはサブシェルではなく現在のコマンド実行環境で exec システムコールを呼び出すことで実行します。これにより、シェルのプロセスは新しく起動するコマンドに置き換わります。オプション
-a コマンド名, --as=コマンド名
コマンドの代わりにコマンド名をコマンド名としてコマンドに渡します。
-c, --clear
既存の環境変数をすべて削除した状態でコマンドを実行します。ただしこの
exec
コマンドを実行する際に行った変数代入の結果は環境変数としてコマンドに渡します。
-f, --force
警告を無視してコマンドを実行します。
オペランド
コマンド実行するコマンドです。
引数...
実行するコマンドに渡すコマンドライン引数です。
終了ステータス
指定されたコマンドの起動に成功した場合、シェルのプロセスはそのコマンドのプロセスに置き換わってしまうので、終了ステータスはありません。補足
Exec コマンドは特殊組込みコマンドです。EXIT 組込みコマンド
Exit 組込みコマンドコマンドはシェルの実行を終了します。構文
•exit [-f]
[終了ステータス
]
説明
Exit コマンドは、このコマンドを実行したシェル (またはサブシェル) を終了します。オプション
-f, --force警告を無視してシェルを終了します。
オペランド
終了ステータス終了するシェルの終了ステータスを指定する
0 以上の自然数です。
このオペランドが与えられていない場合は、exit
コマンドの直前に実行されたコマンドの終了ステータスを用います
(ただしトラップを実行中の場合はトラップに入る直前のコマンドの終了ステータス)。
終了するシェルの実際の終了ステータスは、オペランドで与えられた数を
256
で割った余りになります。
終了ステータス
Exit コマンドはシェルを終了するので、exit コマンドそのものの終了ステータスはありません。補足
Exit コマンドは特殊組込みコマンドです。EXPORT 組込みコマンド
Export 組込みコマンドはエクスポート対象の変数を表示・設定します。構文
•export [-prX]
[変数
[=値]...]
説明
Export コマンドは typeset コマンドに -gx オプションを付けたものと同じです。その他オプション・オペランド・終了ステータスは typeset コマンドと同様です。補足
Export コマンドは特殊組込みコマンドです。FALSE 組込みコマンド
False 組込みコマンドは何も行わずに非 0 の終了ステータスで終了します。構文
•false
説明
False コマンドは何も行いません。コマンドライン引数は一切無視します。終了ステータス
False コマンドの終了ステータスは非 0 です。補足
False コマンドは準特殊組込みコマンドです。FC 組込みコマンド
Fc 組込みコマンドはコマンド履歴に記録されたコマンドを再実行・表示します。構文
•fc [-qr] [-e
エディタ ]
[始点
[終点]]
•fc -s[q]
[前 =後]
[始点 ]
•fc -l[nrv]
[始点
[終点]]
説明
-l (--list) オプションを付けずに実行すると、fc コマンドはオペランドで指定したコマンド履歴のコマンドを再実行します。 -s (--silent) オプションを付けていない場合、シェルはコマンドを再実行する前にエディタを起動し、コマンドを編集できるようにします。エディタが終了するとシェルは編集後のコマンドを実行します。 -s (--silent) オプションを付けた場合、シェルはエディタを起動せず直接コマンドを再実行します。いずれの場合も、実行するコマンドは標準出力に出力しコマンド履歴に追加されます。オプション
-e エディタ, --editor= エディタコマンドの編集に用いるエディタ。
このオプションを指定しない場合、
FCEDIT
変数の値をエディタとして使用します。
FCEDIT
変数も設定されていない場合は、ed
をエディタとして使用します。
-l, --list
コマンド履歴の内容を表示します。
-n, --no-numbers
コマンド履歴の内容を表示する際、履歴番号を省いてコマンドのみ表示します。
-q, --quiet
コマンドを実行する前にコマンドを出力しないようにします。
-r, --reverse
始点と終点を入れ替えます。
-s, --silent
コマンドを編集せずに直接再実行します。
-v, --verbose
コマンド履歴の内容を表示する際、コマンドの時刻も表示します。
オペランド
始点と終点
始点と終点のオペランドは、再実行または表示するコマンドの範囲を指定します。始点あるいは終点に整数を指定すると、それは履歴番号とみなします。負の整数は最新の履歴から数えた番号となります。例えば
-2
は最後から二番目に履歴に登録されたコマンドを表します。整数以外の文字列を
始点あるいは終点に指定すると、その文字列で始まる最新の履歴を指定しているものとみなします。
Fc
コマンドが再実行または表示するコマンドは、
始点と終点で指定したコマンドとその間にある履歴のコマンドです。始点が終点より後のコマンドを指している場合、コマンドの順序は逆になります。
始点または終点が与えられていない場合のデフォルト値は以下の表のとおりです。
前=後
-l あり | -l なし | |
始点 | -16 | -1 |
終点 | -16 | 始点に同じ |
前=後の形式のオペランドは、コマンドの一部を書き換えることを指示します。再実行するコマンドの中に前と同じ文字列がある場合は、その部分を後に置き換えて実行します。該当部分が複数ある場合は、最初のものだけを置き換えます。
終了ステータス
コマンドを正しく再実行できた場合、fc コマンドの終了ステータスは再実行したコマンドの終了ステータスになります。 -l (--list) オプションを指定した場合は、履歴が正しく出力できれば終了ステータスは 0 です。補足
Fc コマンドは準特殊組込みコマンドです。FG 組込みコマンド
Fg 組込みコマンドはジョブをフォアグラウンドで実行します。構文
•fg
[ジョブ ...]
説明
Fg コマンドはジョブをフォアグラウンドに移動し SIGCONT シグナルを送ります。これにより、ジョブが停止していた場合はフォアグラウンドで実行が再開されます。Fg コマンドはジョブの実行が終了するまで待機し、ジョブの終了ステータスを返します。オペランド
ジョブ実行するジョブのジョブ
ID。
複数指定すると指定した順に一つずつジョブをフォアグラウンドで実行します。何も指定しないと現在のジョブを実行します。
非 POSIX
準拠モードではジョブ
ID の先頭の %
は省略できます。
終了ステータス
ジョブを正しく実行できた場合、fg コマンドの終了ステータスは (最後に) 実行したジョブの終了ステータスです。エラーが発生した場合は終了ステータスは非 0 です。補足
Fg コマンドは準特殊組込みコマンドです。GETOPTS 組込みコマンド
Getopts 組込みコマンドはコマンドライン引数のオプションを解析します。構文
•getopts
オプションリスト
変数名
[引数 ...]
説明
Getopts コマンドは、オペランドで与えられたコマンドライン引数に含まれている一文字のオプションを解析します。Getopts コマンドを一回呼び出すたびにオプションが一つ解析され、そのオプションを表す一文字が 変数名で指定した変数に代入されます。•オプションリストの最初の文字がコロンの場合、そのオプションの文字が
OPTARG 変数に代入され、
変数名で指定した変数には
? (
オプションリストで与えられていないオプションに出くわしたとき)
または :
(引数をとるオプションに引数が与えられていないとき)
が代入されます。
•オプションリストの最初の文字がコロンでない場合、OPTARG
変数は削除され、
変数名で指定した変数には
?
が代入されます。またこのとき標準エラーにエラーメッセージが出力されますが、それでも
getopts
コマンドの終了ステータスは
0 になります。
オペランド
オプションリスト解析の対象となるオプションの文字の羅列です。
変数名
解析結果の値を代入する変数の名前です。
引数s
解析するコマンドライン引数です。
このオペランドを指定しない場合は、位置パラメータを解析します。
終了ステータス
引数の中にオプションが見つかった場合は、(それがオプションリストに含まれているかどうかにかかわらず) 終了ステータスは 0 です。全てのオプションを解析し終わった時は、終了ステータスは非 0 です。使用例
aopt=false bopt= copt=false while getopts ab:c opt do case $opt in a) aopt=true ;; b) bopt=$OPTARG ;; c) copt=true ;; \?) return 2 ;; esac done if $aopt; then echo オプション -a が指定されました; fi if [ -n "$bopt" ]; then echo オプション -b $bopt が指定されました; fi if $copt; then echo オプション -c が指定されました; fi shift $((OPTIND - 1)) echo オペランドは $*
補足
Getopts コマンドが解析するコマンドライン引数では、オプションは全てオペランドより前に指定してある必要があります。最初にオペランドが現れた時点で、getopts コマンドは解析を終了します。HASH 組込みコマンド
Hash 組込みコマンドは外部コマンドのパスを検索・表示します。構文
•hash
コマンド ...
•hash -r
[コマンド ...]
•hash [-a]
•hash -d
ユーザ名 ...
•hash -dr
[ユーザ名 ...]
•hash -d
説明
オプションを指定しない場合、hash コマンドはオペランドで指定した外部コマンドのパスを検索し、結果を記憶します (既に記憶している場合は再度検索・記憶します)。オプション
-a, --allシェルが記憶している全てのパスを出力します。
このオプションを指定しない場合、シェルが記憶しているパスのうち組込みコマンドに対するものは出力しません。
-d, --directory
外部コマンドのパスの代わりにユーザのホームディレクトリのパスを扱います。
-r, --remove
指定したコマンドまたはユーザ名に対するパスの記憶を消去します。
オペランド
コマンドパスを記憶・消去する外部コマンドの名前です。スラッシュを含むパスを指定することはできません。
ユーザ名
ホームディレクトリのパスを記憶・消去するユーザ名です。
終了ステータス
エラーがない限り hash コマンドの終了ステータスは 0 です。補足
シェルは、外部コマンド (またはチルダ展開) を実行する際に自動的にコマンド (またはホームディレクトリ) のパスを記憶するので、通常はわざわざ hash コマンドを使ってパスを記憶させる必要はありません。HELP 組込みコマンド
Help 組込みコマンドは組込みコマンドに関する説明を表示します。構文
•help
[コマンド ...]
説明
Help 組込みコマンドは、オペランドで指定した組込みコマンドに関する説明を出力します。オペランド
コマンド説明を表示する組込みコマンドの名前です。
終了ステータス
エラーがない限り help コマンドの終了ステータスは 0 です。補足
Help コマンドは準特殊組込みコマンドです。 POSIX では help コマンドの動作は規定されていません。HISTORY 組込みコマンド
History 組込みコマンドはコマンド履歴を編集します。構文
•history [-cF] [-d
項目 ] [-s
コマンド ] [-r
ファイル ] [-w
ファイル ]
[個数 ]
説明
History コマンドはコマンド履歴の内容を編集・表示します。オプション
-c, --clearコマンド履歴をすべて削除します。
-d 項目,
--delete=項目
指定した項目をコマンド履歴から削除します。項目の指定の仕方は
fc コマンドの
始点・終点オペランドと同じです。
-F, --flush-file
履歴ファイルを再構築します。
-r ファイル,
--read=ファイル
指定したファイルからコマンドを読み込み履歴に追加します。ファイルの内容は単なるテキストファイルとして解釈され、それぞれの行の内容が一つのコマンドとして追加されます。
-s コマンド,
--set=コマンド
コマンド履歴の最後の項目を削除し、代わりに指定したコマンドを追加します。
-w ファイル,
--write=ファイル
指定したファイルに現在のコマンド履歴の内容を全て書き出します。既にあるファイルの内容は消去します。履歴は単なるテキストとして一行ずつ書き出します。
オペランド
個数表示する履歴の個数です。
終了ステータス
エラーがない限り history コマンドの終了ステータスは 0 です。補足
History コマンドは準特殊組込みコマンドです。 POSIX では history コマンドの動作は規定されていません。JOBS 組込みコマンド
Jobs 組込みコマンドはシェルが有しているジョブを表示します。構文
•jobs [-lnprs]
[ジョブ ...]
説明
Jobs コマンドはシェルが現在有しているジョブの名前や状態を表示します。•ジョブ番号
•現在のジョブ・前のジョブを示す記号
( + または -)
•状態
•コマンド名
オプション
-l, --verboseジョブを構成しているパイプラインの要素ごとにプロセス
ID
と状態とコマンド名を表示します。
-n, --new
状態が変化してからまだ一度も表示していないジョブだけを表示します。
-p, --pgid-only
ジョブのプロセスグループ
ID
だけを表示します。
-r, --running-only
実行中のジョブだけを表示します。
-s, --stopped-only
停止中のジョブだけを表示します。
オペランド
ジョブ表示するジョブのジョブ
ID
です。一つも指定しない場合は全てのジョブを表示します。
非 POSIX
準拠モードではジョブ
ID の先頭の %
は省略できます。
終了ステータス
エラーがない限り jobs コマンドの終了ステータスは 0 です。補足
Jobs コマンドは準特殊組込みコマンドです。KILL 組込みコマンド
Kill 組込みコマンドはプロセスにシグナルを送ります。構文
•kill
[-シグナル |-s
シグナル |-n
シグナル ]
プロセス ...
•kill -l [-v]
[シグナル ...]
説明
-l オプションを付けずに実行すると、kill コマンドは指定した プロセスにシグナルを送信します。送信するシグナルの種類は シグナル指定オプションで指定します。シグナルの種類を指定しない場合は SIGTERM シグナルを送信します。オプション
シグナル指定オプション
-シグナル, -s
シグナル, -n
シグナル
シグナル指定オプションは一度に一つまでしか使えません。
送信するシグナルを指定します。シグナルにはシグナル番号とシグナル名のどちらかを指定します。シグナル番号として
0
を指定すると、シグナルを送ることができるかどうかの判定だけを行い、実際にはシグナルを送信しません。シグナルを名前で指定する際は、大文字と小文字の区別はありません。
-l
シグナルに関する情報を表示します。
-v
シグナルに関する情報をより詳しく表示します。-v
オプションを指定していない場合は単にシグナル名を出力しますが、指定している場合はシグナル番号・シグナル名・シグナルの簡単な説明を出力します。
このオプションを指定したときは同時に
-l
も指定してあるとみなします。
オペランド
プロセスシグナルを送信するプロセスをプロセス
ID・プロセスグループ
ID・ジョブ ID
のいずれかで指定します。プロセスグループ
ID
を指定するときは、先頭に負号
( -)
を付けます。プロセスとして
0
を指定すると、シェルプロセスが属するプロセスグループを指定したものとみなします。プロセスとして
-1
を指定すると、全てのプロセスにシグナルを送信します。
シグナル
情報を表示するシグナルの名前または番号です。シグナルによって中断したコマンドの終了ステータスを指定することもできます。
終了ステータス
エラーがない限り kill コマンドの終了ステータスは 0 です。一つ以上のプロセスにシグナルを送ることができた場合、他にシグナルを送れなかったプロセスがあったとしても終了ステータスは 0 になります。補足
Kill コマンドは準特殊組込みコマンドです。LOCAL 組込みコマンド
Local 組込みコマンドはローカル変数を表示・設定します。構文
•local [-rxX]
[name [=value]...]
説明
Local コマンドは typeset コマンドと同じですが -f (--functions) および -g (--global) オプションは使えません。補足
Local コマンドは準特殊組込みコマンドです。 POSIX では local コマンドの動作は規定されていません。POPD 組込みコマンド
Popd 組込みコマンドはディレクトリスタックからディレクトリを削除し、シェルの作業ディレクトリを戻します。構文
•popd
[インデックス
]
説明
Popd コマンドはディレクトリスタックからオペランドで指定したインデックスの要素を削除します。インデックス +0 の要素を削除した場合は、新たにインデックス +0 の要素となったディレクトリにシェルの作業ディレクトリを変更し、そのディレクトリ名を標準出力に出力します。オペランド
インデックス削除するディレクトリスタックの要素のインデックスです。省略すると
+0
を指定したものとみなします。
終了ステータス
ディレクトリスタックの要素を正しく削除し作業ディレクトリを変更できた場合、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
ディレクトリスタックに要素が一つしかない場合はそれ以上要素を削除できないので、エラーになります。PRINTF 組込みコマンド
Printf 組込みコマンドはオペランドを整形して出力します。構文
•printf
書式
[値...]
説明
Printf コマンドはオペランドで指定した 書式に従って値を整形し、標準出力に出力します。Echo コマンドとは異なり、出力の最後には自動的に改行は付きません。整数の値を
(符号付き)
十進整数として出力します。
%u
整数の値を
(符号なし)
十進非負整数として出力します。
%o
整数の値を
(符号なし)
八進非負整数として出力します。
%x
整数の値を小文字の
(符号なし)
十六進非負整数として出力します。
%X
整数の値を大文字の
(符号なし)
十六進非負整数として出力します。
%f
実数の値を小文字の
(符号付き)
小数として出力します。
%F
実数の値を大文字の
(符号付き)
小数として出力します。
%e
実数の値を小文字の
(符号付き)
指数表記小数で出力します。
%E
実数の値を大文字の
(符号付き)
指数表記小数で出力します。
%g
値の大きさや精度に応じて
%f と %e
のどちらかの形式で出力します。
%G
値の大きさや精度に応じて
%F と %E
のどちらかの形式で出力します。
%c
文字列の値の最初の文字を出力します。
%s
文字列の値をそのまま出力します。
%b
文字列の値を、エスケープシーケンスを解釈しながら出力します。ここで使えるエスケープシーケンスは
echo
コマンドで使えるエスケープシーケンスと同じです。
%%
パーセント記号
( %) を出力します。
このフラグを指定すると、指定したフィールド幅の中で値を左に寄せて出力します。このフラグを指定しない場合、値は右に寄ります。
プラス ( +)
数値の符号
(正号または負号)
を必ず出力します。
空白文字 ( )
出力する数値に符号
(正号または負号)
が付かない場合は、符号の代わりに空白文字を出力します。
#
値を別形式で出力します。
変換指定が %o
の場合、出力する八進数の先頭に必ず一桁以上の
0
が付くように、必要に応じて
0 を付加します。
変換指定が %x (または
%X) の場合、値が 0
でなければ数値の先頭に
0x (または 0X)
を付加します。
変換指定が %e, %E, %f,
%F, %g, %G
の場合、小数点の後に数字がない場合でも小数点を省略しないようにします。また変換指定が
%g, %G
の場合、小数点の後に
0
以外の数字がない場合でも
0
を省略しないようにします。
ゼロ ( 0)
変換指定が
%d, %i, %u, %o, %x, %X, %e,
%E, %f, %F, %g, %G
の場合、出力が指定したフィールド幅いっぱいになるまで数値の先頭に
0 を付加します。
マイナスフラグが指定されている場合、このフラグは無視されます。
変換指定が %d, %i, %u,
%o, %x, %X
で、精度が指定されている場合、このフラグは無視されます。
ベル文字 (ASCII
コード番号 7)
\b
バックスペース
(ASCII コード番号 8)
\f
フォームフィード
(ASCII コード番号 12)
\n
改行文字 (ASCII
コード番号 10)
\r
復帰文字 (ASCII
コード番号 13)
\t
水平タブ (ASCII
コード番号 9)
\v
垂直タブ (ASCII
コード番号 11)
\\
バックスラッシュ
\"
二重引用符
\'
一重引用符
(アポストロフィー)
\xxx
八進数 xxx
(最大三桁)
で表わされるコード番号の文字
オペランド
書式出力する文字列の書式です。
値
変換指定が出力する値
(数値または文字列)
です。
数値を値として指定する際、一重または二重引用符の後に何か文字を置いたものを指定することで、その文字のコード番号を数値として指定できます。例えば
3
という文字のコード番号が
51 ならば、 printf '%d' '"3' は
51 を出力します。
終了ステータス
エラーがない限り printf コマンドの終了ステータスは 0 です。補足
POSIX では、マルチバイト文字の扱いについて厳密に定義していません。 %s 変換指定で精度を指定した場合や、 %c 変換指定を使用する場合、値にマルチバイト文字が含まれていると適切な出力が得られないかもしれません。Yash では、マルチバイト文字は全てワイド文字に変換してから処理するので、マルチバイト文字の一部のバイトだけが出力されるようなことはありません。PUSHD 組込みコマンド
Pushd 組込みコマンドはディレクトリスタックにディレクトリを追加し、シェルの作業ディレクトリをそのディレクトリに変更します。構文
•pushd [-L|-P]
[ディレクトリ
]
説明
Pushd コマンドは cd コマンドと同様に、シェルの作業ディレクトリをオペランドで指定したディレクトリに変更します。作業ディレクトリの変更に成功すると、新しい作業ディレクトリをディレクトリスタックに追加します。オプション
Cd コマンドで使えるオプションに加えて以下のオプションが pushd コマンドで使えます。 --remove-duplicates新しい作業ディレクトリが既にディレクトリスタックに入っている場合は、元々入っていた要素を削除して重複をなくします。
オペランド
ディレクトリ新しい作業ディレクトリのパス名です。絶対パスまたは元の作業ディレクトリからの相対パスで指定します。
この値がハイフン一つ
( -) の場合、OLDPWD
変数の値が指定されたものとみなします。
この値が符号付き整数の場合、その整数をディレクトリスタックの要素のインデックスとみなして、その要素が表すディレクトリが指定されたものとみなします
(指定された要素はディレクトリスタックから削除されます)。
このオペランドが与えられていない場合、インデックス
+1
が指定されたものとみなします
( --default-directory
オプションを指定した場合を除く)。
終了ステータス
作業ディレクトリを正しく変更しディレクトリスタックに追加できた場合、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
Pushd コマンドは準特殊組込みコマンドです。 POSIX では pushd コマンドの動作は規定されていません。PWD 組込みコマンド
Pwd 組込みコマンドはシェルの現在の作業ディレクトリを表示します。構文
•pwd [-L|-P]
説明
Pwd コマンドはシェルの現在の作業ディレクトリを絶対パスで標準出力に出力します。オプション
-L, --logical
PWD
変数の値が現在の作業ディレクトリの絶対パスで、中に
. や ..
を含んでいなければ、それを出力します。それ以外の場合は
-P
を指定した場合と同様に出力します。
-P, --physical
現在の作業ディレクトリの絶対パスを、中にシンボリックリンクを含まないかたちで出力します。
終了ステータス
エラーがない限り pwd コマンドの終了ステータスは 0 です。補足
Pwd コマンドは準特殊組込みコマンドです。READ 組込みコマンド
Read 組込みコマンドは標準入力から行を読み込み変数に代入します。構文
•read [-Aer] [-P|-p]
変数名 ...
説明
Read コマンドは標準入力から一行の文字列を読み込み、それを変数に代入します。オプション
-A, --array最後に指定した変数を配列にします。分割後の各文字列が配列の要素として設定されます。
-e, --line-editing
読み込みに行編集を使用します。
行編集が有効になるには以下の条件が全て満たされている必要があります:
-P, --ps1
•シェルが対話モードである。
•vi または emacs
オプションが有効になっている。
•標準入力と標準エラーが端末である。
シェルが対話モードで標準入力が端末ならば、(最初の)
行を読み込む前に PS1
変数をプロンプトとしてを表示します。
-p プロンプト,
--prompt= プロンプト
シェルが対話モードで標準入力が端末ならば、(最初の)
行を読み込む前に
プロンプトを表示します。
-r, --raw-mode
読み込んだ文字列の中のバックスラッシュを引用符として扱わないようにします。
オペランド
変数名読み込んだ文字列を格納する変数の名前です。
終了ステータス
エラーがない限り read コマンドの終了ステータスは 0 です。補足
Read コマンドは準特殊組込みコマンドです。READONLY 組込みコマンド
Readonly 組込みコマンドは読み取り専用の変数または関数を表示・設定します。構文
•readonly [-pxX]
[変数
[=値]...]
•readonly -f[p]
[変数 ...]
説明
Readonly コマンドは typeset コマンドに -gr オプションを付けたものと同じです。その他オプション・オペランド・終了ステータスは typeset コマンドと同様です。補足
readonly コマンドは特殊組込みコマンドです。RETURN 組込みコマンド
Return 組込みコマンドは現在実行中の関数またはスクリプトの実行を終了します。構文
•return [-n]
[終了ステータス
]
説明
-n (--no-return) オプションを付けずに return コマンドを実行すると、以下のうち当てはまる動作を行います:•関数の実行中の場合は、その関数の実行を終了します。
•ドットコマンドでファイルを開いてコマンドを実行している途中の場合は、そのファイルの読み込み・実行を終了します。
•シェルの初期化スクリプトを実行中の場合は、そのスクリプトの実行を終了します。
•トラップを実行中の場合は、そのトラップの実行を終了します。(ただし他のシグナルに関するトラップの実行が控えている場合はそれらは通常通り実行されます。)
•これ以外の場合は、(対話モードのときを除いて)
シェルは終了します。
オプション
-n, --no-returnコマンドの実行を中断しません。
オペランド
終了ステータスReturn
コマンドの終了ステータスを指定する
0 以上の自然数です。
このオペランドが与えられていない場合は、return
コマンドの直前に実行されたコマンドの終了ステータスを用います
(ただしトラップを実行中の場合はトラップに入る直前のコマンドの終了ステータス)。
終了ステータス
Return コマンドの終了ステータスはオペランドで与えられた値です。Return コマンドの終了ステータスは return コマンドが終了する関数・ドットコマンド・初期化スクリプト・シェル自身の終了ステータスにもなります。補足
Return コマンドは特殊組込みコマンドです。SET 組込みコマンド
Set 組込みコマンドはシェルのオプションの設定と位置パラメータの変更を行います。構文
•set
[オプション ...]
[ オペランド...]
•set -o
•set +o
説明
コマンドライン引数を一切与えずに set コマンドを実行すると、現在シェルに設定されている全ての変数の一覧をアルファベット順で (コマンドとして解釈可能な形式で) 標準出力に出力します。オプション
オプションが一つ以上与えられている場合、set コマンドはそれらの有効・無効を切り替えます。通常の形式でオプションを与えると、そのオプションは有効になります。オプションの先頭のハイフン ( -) の代わりにプラス (+) を付けて指定すると、そのオプションは無効になります。例えば -m や -o monitor や --monitor はシェルのジョブ制御を有効にし、逆に +m や +o monitor や ++monitor はジョブ制御を無効にします。•長いオプション
(例: --allexport)
•引数としてオプション名を指定した
-o オプション (例: -o
allexport)
•一文字のオプション
(例: -a)
このオプションが有効な時、変数に代入をするとその変数は自動的にエクスポート対象になります。
brace-expand
このオプションはブレース展開を有効にします。
case-glob
このオプションが有効な時、パス名展開におけるパターンマッチングは大文字と小文字を区別して行います。このオプションはシェルの起動時に最初から有効になっています。
clobber ( +C)
このオプションを無効にすると、
>
演算子によるリダイレクトで既存のファイルを上書きすることはできなくなります。このオプションはシェルの起動時に最初から有効になっています。
cur-async, cur-bg, cur-stop
これらのオプションは現在のジョブの選択の仕方に影響します。(ジョブ
ID
参照)。これらのオプションはシェルの起動時に最初から有効になっています。
dot-glob
このオプションが有効な時、パス名展開においてファイル名の先頭のピリオドを特別に扱いません。
emacs
このオプションは
emacs
風行編集を有効にします。
empty-last-field
このオプションが有効な時、単語分割で最後の単語が空になっても削除しません。
err-exit ( -e)
このオプションが有効な時、実行したパイプラインの終了ステータスが
0
でなければ、シェルは直ちに終了します。ただし、以下の抑止条件に当てはまる場合を除きます。
err-return
•そのコマンドが
if 文の分岐や while/until
文のループ条件の判定に使われる場合
•パイプラインの先頭に
!
が付いている場合
•パイプラインがサブシェルグルーピング以外の単独の複合コマンドから構成される場合
このオプションは
err-exit
オプションと同様ですが、終了ステータスが
0
でないときにシェルが終了する代わりに
return
組込みコマンドが発動します。
Err-exit
オプションと異なり、抑止条件は関数・サブシェルグルーピング・スクリプトファイルの中では無視されます。
exec ( +n)
このオプションが無効な時、シェルはコマンドの解釈だけを行い、実際にはコマンドを実行しません。このオプションはシェルスクリプトの文法チェックをするのに便利です。このオプションはシェルの起動時に最初から有効になっています。対話モードでは、このオプションに関わらずコマンドは常に実行されます。
extended-glob
このオプションはパス名展開における拡張機能を有効にします。
for-local
For
ループが関数の中で実行されるとき、このオプションが有効ならばループの変数はローカル変数として代入されます。このオプションはシェルの起動時に最初から有効になっています。POSIX
準拠モードではこのオプションに関係なく
for
ループの変数は通常の変数として代入されます。
glob ( +f)
このオプションが有効なときはシェルはパス名展開を行います。このオプションはシェルの起動時に最初から有効になっています。
hash-on-def ( -h)
このオプションが有効なとき関数を定義すると、直ちにその関数内で使われる各コマンドの
PATH
検索を行いコマンドのパス名を記憶します。
hist-space
このオプションが有効な時は空白で始まる行はコマンド履歴に自動的に追加しません。
ignore-eof
このオプションが有効な時、対話モードのシェルに
EOF (入力の終わり)
が入力されてもシェルはそれを無視してコマンドの読み込みを続けます。これにより、誤って
Ctrl-D
を押してしまってもシェルは終了しなくなります。
le-always-rp, le-comp-debug, le-conv-meta, le-no-conv-meta, le-predict,
le-predict-empty, le-prompt-sp, le-visible-bell
これらのオプションは行編集の動作に影響します。行編集のオプションを参照してください。
mark-dirs
このオプションが有効な時、パス名展開の展開結果においてディレクトリを表すものの末尾にスラッシュを付けます。
monitor ( -m)
このオプションはジョブ制御を有効にします。シェルを対話モードで起動したときこのオプションは自動的に有効になります。
notify ( -b)
このオプションが有効な時は、バックグラウンドのジョブの実行状態が変化するとシェルは直ちにそれを標準エラーに報告します。このオプションは
notifyle
オプションより優先します。
notify-le
このオプションは
notify
オプションとほぼ同じですが、行編集を行っている最中のみジョブの状態変化を報告します。
null-glob
このオプションが有効な時、パス名展開でマッチするパス名がないとき元のパターンは残りません。
pipe-fail
このオプションが有効な時、パイプラインの全てのコマンドの終了ステータスが
0
の時のみパイプラインの終了ステータスが
0 になります。
posixly-correct
このオプションは
POSIX
準拠モードを有効にします。
trace-all
このオプションは、補助コマンド実行中も
x-trace
オプションを機能させるかどうかを指定します。補助コマンドとは、
COMMAND_NOT_FOUND_HANDLER、
PROMPT_COMMAND、および YASH_AFTER_CD
変数の値として定義され、特定のタイミングで解釈・実行されるコマンドです。
このオプションはシェルの起動時に最初から有効になっています。
unset ( +u)
このオプションが有効な時、パラメータ展開で存在しない変数を展開すると空文字列に展開され、数式展開で存在しない変数を使用すると
0
とみなされます。オプションが無効な時、存在しない変数を使用するとエラーになります。このオプションはシェルの起動時に最初から有効になっています。
verbose ( -v)
このオプションが有効な時、シェルは読み込んだコマンドをそのまま標準エラーに出力します。
vi
このオプションは
vi
風行編集を有効にします。対話モードが有効で標準入力と標準エラーがともに端末ならばこのオプションはシェルの起動時に自動的に有効になります。
x-trace ( -x)
このオプションが有効な時、コマンドを実行する前に展開の結果を標準エラーに出力します。この出力は、各行頭に
PS4
変数の値を展開した結果を付けて示されます。
Trace-all
オプションも参照してください。
オペランド
Set コマンドにオペランドが与えられている場合またはオプションとオペランドを区切るハイフン二つ ( --, コマンドの引数の構文参照) がコマンドライン引数に入っている場合は、現在の位置パラメータは削除され、与えられたオペランドがそれぞれ新しく位置パラメータになります。ハイフン二つが与えられていてかつオペランドがない場合は位置パラメータはなくなります。終了ステータス
オプションの指定が間違っている場合を除き、set コマンドの終了ステータスは 0 です。補足
Set コマンドは特殊組込みコマンドです。•--allexport
などの長いオプションは使えません。
•オプション名に
no
を付けてオプションを無効にすることはできません。
•オプション名に大文字や英字でない記号は使えません。
•-a, -o allexport
•-e, -o errexit
•-m, -o monitor
•-C, -o noclobber
•-n, -o noexec
•-f, -o noglob
•-b, -o notify
•-u, -o nounset
•-v, -o verbose
•-x, -o xtrace
•-h
•-o ignoreeof
•-o nolog
•-o vi
SHIFT 組込みコマンド
Shift 組込みコマンドは位置パラメータまたは配列の要素のいくつかを削除します。構文
•shift [-A
配列名 ]
[個数 ]
説明
Shift コマンドは位置パラメータまたは配列の要素のうち最初のいくつかを削除します。削除するパラメータ・要素の数はオペランドで指定します。オプション
-A 配列, --array=配列位置パラメータではなく配列の最初の要素を削除します。
オペランド
個数削除する位置パラメータまたは配列の要素の個数を指示する整数です。
実際の位置パラメータ・要素の個数より大きい数を指定するとエラーになります。省略すると
1
を指定したものとみなします。負数を指定すると最初ではなく最後の位置パラメータまたは配列要素を削除します。
終了ステータス
エラーがない限り shift コマンドの終了ステータスは 0 です。補足
Shift コマンドは特殊組込みコマンドです。SUSPEND 組込みコマンド
Suspend 組込みコマンドはシェルを停止 (サスペンド) します。構文
•suspend [-f]
説明
Suspend コマンドはシェルプロセスが属するプロセスグループ内のすべてのプロセスに対して SIGSTOP シグナルを送信します。これにより、シグナルを送られた各プロセス (シェル自身を含む) は停止 (サスペンド) 状態になります。停止状態になったプロセスは SIGCONT シグナルを受信すると実行を再開します。オプション
-f, --force警告を無視してシェルを停止します。
終了ステータス
Suspend コマンドの終了ステータスは、SIGSTOP シグナルをシェルに正しく送信できたときは 0、それ以外なら非 0 です。補足
Suspend コマンドは準特殊組込みコマンドです。 POSIX では suspend コマンドの動作は規定されていません。TEST 組込みコマンド
Test 組込みコマンドは引数で指定した内容の判定を行います。構文
•test
判定式
•[
判定式 ]
説明
Test コマンドは引数で与えられた 判定式を評価し、結果が真ならば 0 の終了ステータスを、偽ならば 1 の終了ステータスで終了します。判定式は何種類かの演算子とそれに対する被演算子とからなります。
ファイルがブロックスペシャルファイルかどうか
-c ファイル
ファイルがキャラクタスペシャルファイルかどうか
-d ファイル
ファイルがディレクトリかどうか
-e ファイル
ファイルが存在するかどうか
-f ファイル
ファイルが通常のファイルかどうか
-G ファイル
ファイルのグループ
ID
がシェルの実効グループ
ID に等しいかどうか
-g ファイル
ファイルの
set-group-ID
ビットが設定されているかどうか
-h ファイル
-L
ファイル
に同じ
-k ファイル
ファイルの
sticky
ビットが設定されているかどうか
-L ファイル
ファイルがシンボリックリンクかどうか
-N ファイル
ファイルの最終変更日時が最終アクセス日時より後かどうか
-O ファイル
ファイルのユーザ
ID
がシェルの実効ユーザ
ID に等しいかどうか
-p ファイル
ファイルが
FIFO (名前付きパイプ)
かどうか
-r ファイル
ファイルが読み込み可能かどうか
-S ファイル
ファイルがソケットかどうか
-s ファイル
ファイルサイズが空でないかどうか
-u ファイル
ファイルの
set-user-ID
ビットが設定されているかどうか
-w ファイル
ファイルが書き込み可能かどうか
-x ファイル
ファイルが実行可能かどうか
ファイル記述子が端末かどうか
(ファイル記述子は 0
以上の自然数で指定します)
文字列が空文字列でないかどうか
-z 文字列
文字列が空文字列かどうか
オプションが正しいオプション名であるかどうか
-o オプション
オプションが正しいオプション名であり、かつオプションが有効に設定されているかどうか
ファイル1の更新時刻がファイル2より新しいかどうか
ファイル1 -ot
ファイル2
ファイル1の更新時刻がファイル2より古いかどうか
ファイル1 -ef
ファイル2
二つのファイルが互いのハードリンクであるかどうか
二つの文字列が同じかどうか
文字列1 !=
文字列2
二つの文字列が異なるかどうか
二つの文字列が同じかどうか
文字列1 !==
文字列2
二つの文字列が異なるかどうか
文字列1 <
文字列2
文字列1 が
文字列2
よりも順序が手前かどうか
文字列1 <=
文字列2
文字列1 が
文字列2
よりも順序が手前または同じかどうか
文字列1 >
文字列2
文字列1 が
文字列2
よりも順序が後かどうか
文字列1 >=
文字列2
文字列1 が
文字列2
よりも順序が後または同じかどうか
拡張正規表現パターンが文字列(の一部)にマッチするかどうか
v1 と v2
が等しいかどうか
v1 -ne v2
v1 と v2
が異なるかどうか
v1 -gt v2
v1 が v2
よりも大きいかどうか
v1 -ge v2
v1 が v2
以上かどうか
v1 -lt v2
v1 が v2
よりも小さいかどうか
v1 -le v2
v1 が v2
以下かどうか
v1 と v2
が等しいかどうか
v1 -vne v2
v1 と v2
が異なるかどうか
v1 -vgt v2
v1 が v2
よりも大きいかどうか
v1 -vge v2
v1 が v2
以上かどうか
v1 -vlt v2
v1 が v2
よりも小さいかどうか
v1 -vle v2
v1 が v2
以下かどうか
判定式が偽かどうか
(判定式の真偽を逆転します)
( 判定式 )
判定式が真かどうか
(判定式の構文上の優先順位を高くします)
判定式1 -a
判定式2
二つの判定式が両方とも真かどうか
判定式1 -o
判定式2
二つの判定式の少なくとも片方が真かどうか
終了ステータス
Test コマンドの終了ステータスは、 判定式の評価結果が真ならば 0、偽ならば 1 です。 判定式の構文に誤りがある場合その他のエラーが発生したときは、終了ステータスは 2 です。補足
複雑な判定式は誤って解釈されることがあるので避けることをお勧めします。例えば [ 1 -eq 1 -a -t = 1 -a ! foo ] は [ 1 -eq 1 ] && [ -t = 1 ] && ! [ foo ] のようにコマンドを分けると式がより明確になります。TIMES 組込みコマンド
Times 組込みコマンドはシェルとシェルが起動したコマンドが消費した CPU 時間を表示します。構文
•times
説明
Times コマンドはシェルプロセスとその子プロセスが消費した CPU 時間を標準出力に出力します。一行目にシェルプロセス自身がユーザモードおよびシステムモードで消費した CPU 時間をそれぞれ表示します。二行目にシェルの全ての子孫プロセス (親プロセスが wait していないものを除く) がユーザモードおよびシステムモードで消費した CPU 時間をそれぞれ表示します。終了ステータス
エラーがない限り times コマンドの終了ステータスは 0 です。補足
Times コマンドは特殊組込みコマンドです。TRAP 組込みコマンド
Trap 組込みコマンドはシェルがシグナルを受信したときの動作を設定します。構文
•trap
•trap
動作
シグナル ...
•trap
シグナル番号
[シグナル...]
•trap -p
[シグナル ...]
説明
Trap コマンドはシェルプロセスがシグナルを受信したときの動作 ( トラップ) を表示または設定します。オプション
-p, --print現在のトラップの設定を表示します。
オペランド
動作シグナルを受信した際の動作を指定します。動作がハイフン一つ
( -)
ならば、シェルはシステムで規定された標準の動作を行います。
動作が空文字列ならば、シェルはシグナルを無視します。それ以外の値を指定すると、シェルはこのオペランドをコマンドとみなして、シグナル受信時にこれを解釈・実行します
(コマンドの実行中にシグナルを受信したときは、コマンドが終了した後にトラップを実行します)。
シグナル
動作の対象となるシグナルです。シグナルはシグナル番号とシグナル名のどちらかで指定します。
シグナルとして 0
または EXIT
を指定すると、これはシェルの終了時に発生する仮想のシグナルを指定しているとみなします。この仮想のシグナルに対して設定された
動作は、シェルが正常終了する直前に実行されます。
シグナル番号
シグナルと同様ですが、シグナルを番号で指定します。
終了ステータス
トラップが正しく設定または表示されたときは終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
Trap コマンドは特殊組込みコマンドです。saved_trap=$(trap) trap '...' INT eval "$saved_trap"
•コマンド置換の中身がただ一つの
trap
コマンドである場合は、そのコマンド置換を実行するサブシェルの開始時にトラップ設定を解除しない。
•サブシェルの開始時にトラップ設定を解除する際に、以前の設定を憶えておく。サブシェル内で
trap
コマンドがトラップ設定を出力する際、まだそのサブシェル内で別の
trap
コマンドがトラップ設定を変更していなければ、憶えておいた以前の設定を出力する。
TRUE 組込みコマンド
True 組込みコマンドは何も行わずに 0 の終了ステータスで終了します。構文
•true
説明
True コマンドは何も行いません。コマンドライン引数は一切無視します。終了ステータス
True コマンドの終了ステータスは 0 です。補足
True コマンドは準特殊組込みコマンドです。TYPE 組込みコマンド
Type 組込みコマンドはコマンドの種類を特定します。構文
•type [-abefkp]
[コマンド ...]
説明
Type コマンドは command コマンドに -V オプションを付けたものと同じです。その他オプション・オペランド・終了ステータスは command コマンドと同じです。補足
POSIX では、type コマンドと command コマンドとの関係について規定していません。従って他のシェルの type コマンドは command コマンドに -V オプションを付けたものとは異なる動作をすることがあります。また POSIX は type コマンドのオプションを規定していません。TYPESET 組込みコマンド
Typeset 組込みコマンドは変数または関数を表示・設定します。構文
•typeset [-gprxX]
[変数
[=値]...]
•typeset -f[pr]
[関数 ...]
説明
-f (--functions) オプションを付けずに実行すると、typeset コマンドは変数を出力または設定します。 -f (--functions) オプションを付けて実行すると、typeset コマンドは関数を出力または設定します。オプション
-f, --functions変数ではなく関数を表示または設定します。
-g, --global
このオプションを指定すると、新しく変数を作成する場合その変数をグローバル変数とします。すなわち変数は関数の実行が終わっても残ります。このオプションを指定しない場合、設定する変数はローカル変数になります。
オペランドがない場合は、このオプションを指定していると全ての変数を出力します。このオプションを指定していないとローカル変数だけ出力します。
-p, --print
変数または関数の定義を
(コマンドとして解釈可能な形式で)
出力します。
-r, --readonly
設定する変数・関数を読み取り専用にします。読み取り専用の変数・関数は、値を変更したり削除したりできなくなります。
変数・関数を出力する際は、読み取り専用の変数・関数だけ出力します。
-x, --export
設定する変数をエクスポート対象にします。
変数を出力する際は、エクスポート対象の変数だけ出力します。
-X, --unexport
設定する変数をエクスポート対象から外します。
オペランド
変数出力または設定する変数の名前です。
変数が既に存在する場合、変数の値は変わりません。存在しない変数を指定した場合、変数は存在するがその値は存在しない状態になります
(このような変数はパラメータ展開では存在しない変数として扱います)。
変数=値
設定する変数の名前とその値です。
指定した
値が変数の値として設定されます。この形式のオペランドでは、
-p ( --print)
オプションを指定したときでもこの変数は出力ではなく設定されます。
関数
出力または設定する関数の名前です。存在しない関数を指定することはできません。
終了ステータス
エラーがない限り typeset コマンドの終了ステータスは 0 です。補足
既にローカル変数が存在する場合、それを無視してグローバル変数を新しく作ることはできません ( -g (--global) オプションを指定していても既存のローカル変数が再設定されます)。ULIMIT 組込みコマンド
Ulimit 組込みコマンドはシェルプロセスのリソース制限を表示・設定します。構文
•ulimit -a [-H|-S]
•ulimit [-H|-S] [-efilnqrstuvx]
[ 値]
説明
Ulimit コマンドはシェルプロセスのリソース制限値を表示または設定します。オプション
-H, --hardハードリミットを表示または設定します。
-S, --soft
ソフトリミットを表示または設定します。
-a, --all
全種類のリソース制限値を表示します。
プロセスが強制終了させられたときにできるコアファイルのサイズの限界
(512 バイト単位)
-d, --data
プロセスが使用できるデータセグメント領域のサイズの限界
(キロバイト単位)
-e, --nice
スケジューリング優先度
(nice 値) の限界
-f, --fsize
プロセスが作成できるファイルのサイズの限界
(512 バイト単位)
-i, --sigpending
プロセスの処理待ちシグナルの個数の限界
-l, --memlock
RAM
上にロック可能なメモリサイズの限界
(キロバイト単位)
-m, --rss
プロセスの
resident set (RAM
上に存在する仮想ページ)
の数の限界
(キロバイト単位)
-n, --nofile
プロセスが使用できるファイル記述子の最大値
+ 1
-q, --msgqueue
POSIX
メッセージキューのサイズの限界
-r, --rtprio
リアルタイムスケジューリングの優先度の限界
-s, --stack
プロセスが使用できるスタック領域のサイズの限界
(キロバイト単位)
-t, --cpu
プロセスが使用できる
CPU 時間の限界 (秒単位)
-u, --nproc
プロセスが起動できる子プロセスの個数の限界
-v, --as
プロセスが使用できるメモリ領域全体のサイズの限界
(キロバイト単位)
-x, --locks
プロセスがロックできるファイルの個数の限界
オペランド
値設定するリソース制限値です。
値は基本的に 0
以上の自然数で指定しますが、自然数の代わりに
hard、soft、unlimited
のいずれかの文字列を指定することもできます。これらの文字列はそれぞれ現在のハードリミットの値、現在のソフトリミットの値、無制限を表します。
終了ステータス
リソース制限値が正しく出力または設定できたときは、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
POSIX が規定しているオプションは -f だけです。また POSIX はオペランドの 値として自然数しか規定していません。UMASK 組込みコマンド
Umask 組込みコマンドはシェルプロセスのファイルモード作成マスクを表示・設定します。構文
•umask
マスク
•umask [-S]
説明
オペランドが与えられていないとき、umask コマンドはシェルプロセスの現在のファイルモード作成マスクを標準出力に出力します。 -S (--symbolic) オプションで出力の形式を指定できます。出力はオペランドとして再利用可能な形式になっています。オプション
-S, --symbolicこのオプションが指定されているときは、記号形式でファイルモード作成マスクを出力します。このオプションが指定されていないときは、数値形式で出力します。
オペランド
マスクこのオペランドが与えられているときは、umask
コマンドはファイルモード作成マスクをこの値に設定します。値は以下に述べる数値形式と記号形式のどちらかで与えます。
ユーザの読み取り権限
0200
ユーザの書き込み権限
0100
ユーザの実行権限
0040
グループの読み取り権限
0020
グループの書き込み権限
0010
グループの実行権限
0004
その他の読み取り権限
0002
その他の書き込み権限
0001
その他の実行権限
ユーザ
g
グループ
o
その他
a
ユーザ・グループ・その他の全て
対象に対する設定を権限にします。
+
対象に対する設定に権限を加えます。
-
対象に対する設定から権限を除きます。
読み取り権限
w
書き込み権限
x
実行権限
X
実行権限
(元々実行権限が設定されていた場合のみ)
s
Set-user-ID, Set-group-ID
u
現在のユーザの値
g
現在のグループの値
o
現在のその他の値
終了ステータス
ファイルモード作成マスクが正しく出力または設定できたときは、終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。補足
Ulimit コマンドは準特殊組込みコマンドです。UNALIAS 組込みコマンド
Unalias 組込みコマンドはエイリアスを削除します。構文
•unalias
エイリアス名
...
•unalias -a
説明
Unalias コマンドはオペランドで指定したエイリアスを削除します。オプション
-a, --all全てのエイリアスを削除します。
オペランド
エイリアス名削除するエイリアスの名前です。
終了ステータス
エラーがない限り unalias コマンドの終了ステータスは 0 です。存在しないエイリアスをオペランドで指定した場合はエラーになります。補足
Unalias コマンドは準特殊組込みコマンドです。UNSET 組込みコマンド
Unset 組込みコマンドは変数または関数を削除します。構文
•unset [-fv]
[名前 ...]
説明
Unset コマンドはオペランドで指定した名前の変数または関数を削除します。オプション
-f, --functions関数を削除します。
-v, --variables
変数を削除します。
オペランド
名前削除する変数または関数の名前です。
終了ステータス
エラーがない限り unset コマンドの終了ステータスは 0 です。補足
Unset コマンドは特殊組込みコマンドです。WAIT 組込みコマンド
Wait 組込みコマンドはバックグラウンドのジョブが終了するのを待ちます。構文
•wait
[ジョブ ...]
説明
Wait コマンドは実行中のバックグラウンドジョブが終了するのを待ちます。ジョブ制御が有効な時は、ジョブが停止したときも終了したとみなします。オペランド
ジョブ終了を待つジョブ・非同期コマンドのジョブ
ID またはプロセス ID
です。
終了ステータス
ジョブが一つも与えられておらず、シェルが全てのジョブ・非同期コマンドの終了を正しく待つことができた場合、終了ステータスは 0 です。 ジョブが一つ以上与えられているときは、最後の ジョブの終了ステータスが wait コマンドの終了ステータスになります。補足
Wait コマンドは準特殊組込みコマンドです。著者
渡邊 裕貴[FAMILY Given] <[email protected]>著者.
2022-07-10 |