ビルトインコマンドのメモ

12月 26, 2009

シェルスクリプトでよく使用されると思われるビルトインコマンドについてざっくりメモ。
知っているつもりで知らないことって、結構あるので。

ビルトインコマンドはシェルに組み込まれているコマンド。ソフトウェアとして
bashに含まれており、ファイルとしては存在しない。
よってwhich、whereisコマンドでパスを探しても結果は得られないが、typeコマンドで
ビルトインか外部コマンドかの確認ができる。ビルトインと外部コマンドとで同名の
コマンドが存在する場合がある。typeに-aオプションをつけると両方表示してくれる。
なお、ビルトインコマンドはシェルと同じプロセス内で動作する。

source
ファイル名を指定して実行する。sourceコマンドではファイルに実行権を与える必要がない。
ファイルは現在のシェルで実行され、環境がそのまま引継がれるため、変数の取り扱いに注意。

break
for,while,until,selectなどで実行されるループ処理から抜け出し、またループを終了させる。
※continueもループから抜けることができるが、こちらは次のループ処理は継続される。
2つ以上のループを抜け出すには、引数として数値を与える。一般的によく使用されるのが、
ループ処理の中にif文で条件を設定し、if文で条件を満たしたらループ処理を終了させる方法。

continue
for,while,until,selectなどで実行されるループ処理から抜け出す。ループ処理は継続される。
2つ以上のループを抜け出すには、引数として2以上の数値を与える。

export
シェルの変数、配列、関数などの定義を、現在のシェルの他新しいシェルでも
有効にしたいときにエクスポートする。

-f
エクスポートされた関数のリストが表示される。
オプションに続いて関数名を指定すると、その関数がエクスポートされる。


exit
シェルを終了させる。引数にnを指定し(”exit 0″など)、終了ステータスを設定
することができる。指定がない場合、最後に実行したコマンドの終了ステータスが返される。

printf
引数として与えられた内容をフォーマットに従って出力する。echoコマンドと似ているが、
フォーマットを詳細に指定できる。printfは単体で使用するとエラーになる。
コマンド実行時に自動改行されないので、改行するには’文学列\n’とする。

return
returnコマンドは関数の終了ステータスを特定するために利用し、関数内でのみ使用できる。
引数を与えるとその引数が終了ステータスとなり、引数がない場合は終了ステータスに0を返す。
returnコマンドを使わない場合の関数の終了ステータスは関数内で最後に実行された
コマンドの終了ステータスが採用される。

set
シェルの動作に関する属性・機能を制御する。または、$1、$2 …などの位置パラメータ
の値を変更する。この場合-か- -オプションを使用する。-o オプション単体で使用
するとシェルの設定項目と状態を出力する。合わせて項目を指定すると、その機能が有効になる。
「+o 項目名」で、その項目をOFFにする。

unset
変数、配列、関数を削除する。unsetの実行により、対象がエクスポートされていても削除される。

-f 関数から関数名を削除する
-v シェル変数から名前を削除する

cd
cd [ dir ]で、現在のシェルでの作業ディレクトリを変更する。
dirが省略された場合は${HOME}に移動する。
declare(typeset)
配列、関数、変数の属性の宣言や属性の変更をする。単に参照したい時にも利用できる。declareもtypesetも同様の働きをするが、現在はdeclareが使用されることが多いよう。

-p 属性と値を出力する
-a 変数を配列として扱う
-i 変数を整数として扱う
-r 読み込み専用として扱う
-x 印をつけ、エクスポートする
-f 関数名のみを使用する
-F 関数定義の出力を止める

echo
受け取った引数を標準出力に表示する。ちなみにシェルでの使用頻度が高いためビルトインとなったそうだ。

-n 行末の改行を付加しない
-e エスケープ文学を解釈する
-E エスケープ文学の解釈を抑制する

eval
引数で渡された文字列をコマンドとして実行する。「eval arg1 …」とすると、引数arg1で渡された文字列をコマンドとして解釈する。正確に言うと、evalは対象のコマンドライン展開を2度実行する。2度実行することにより、変数にセットされているパイプやリダイレクトが実行可能になる。
exec
execは新しいプロセスを生成せずにコマンドを実行する。シェルスクリプト内でexecコマンドが実行されると、シェルスクリプトは終了する。スクリプトから起動される最後のプログラムなどその終了を待つ必要がない場合に、execを利用してシェルを指定したコマンドで置き換えることができる。実行対象のコマンド名はファイルとして存在する外部コマンドが指定可能で、関数や組み込みコマンドは使用できない。
別の使い方として、シェルの入出力先を変更することができる(リダイレクト)。
kill
指定したプロセスにシグナルを送る。シグナル指定が省略された場合、SIGTERMが指定されたものと見なす。シグナル指定には対話式コマンドと同様にシグナル名、シグナル番号いずれも使用できる。
let
与えられた文字列を算術式として評価する。
arg1 arg2 …. を算術式として評価し、最後の評価結果が0であれば1を、0以外であれば0を終了ステータスとして返す。算術式での真偽は「0が偽、それ以外が真」だが、終了ステータスは「0が真、それ以外が偽」と逆になるので注意。

let arg1 [ arg2 .... ]


local
シェル関数内において、そのシェル関数とその子関数内でのみ有効な変数を生成する。
変数のスコープ(有効範囲)が関数内であることを除けば、コマンドの意味や書式はdeclareと同じ。

read
標準入力から1行読み込み、空白またはTABで区切って変数に代入する。

trap
シェルがシグナルを受け取った時に対応するコマンドを設定する。

umask
新規に作成するファイルのパーミッションを設定する。

wait
シェルから起動しているプログラムが終了するのを待つ。PIDを指定すればそのプロセスが終了するのを待ち、引数を指定しなかった場合はバックグラウンドで起動したすべてのプロセスの終了を待ち、終了ステータスとして0を返す。

shift
引数をひとつずらすコマンド。繰り返し処理の中で使われる。実行すると引数が1つずつずれ、$2が$1へ、$3が$2となり、$1は捨てられ、$0は変わらない。※$0は第0引数、つまりコマンド自体を表す。

pwd
カレントディレクトリを表示する。

dirs
ディレクトリスタックのエントリを出力する。シェルが起動された時のカレントディレクトリや
pushdコマンドが実行された時に、シェルはディレクトリスタックと呼ばれるディレクトリの
リストを保存する。dirsコマンドはこのディレクトリスタックのエントリの出力や、
エントリの一括削除を行う。オプションなしで実行すると、現在のディレクトリスタック
のエントリを全て出力する。

-p ディレクトリエントリを縦一列で表示する
-v ディレクトリエントリを番号付きで表示する
-l ディレクトリエントリを絶対パスで表示する
-c ディレクトリエントリを削除する


pushd/popd
ディレクトリ情報をスタックに保存、またはスタックから参照する。pushdはカレントディレクトリをスタックの先頭に保存しdirディレクトリに作業ディレクトリ
を変更する。変更が成功すればスタックの内容を表示して終了ステータス0で終了する。
popdはpushdコマンドで最後にスタックに保存したディレクトリを取り出し、
作業ディレクトリをそのディレクトリに変更する。popdをオプションなしで実行すると、
一番目のエントリが削除される。

pushd dir ディレクトリスタックにdirを追加し、移動する
pushd -n dir ディレクトリスタックにdirを追加し、移動はしない


dirs/pushd/popd共通で、オプション+nは左から数えてn番目のエントリ、-nは右から数えてn番目
のエントリ、を示す。エントリは0から始まるので、例えば$ popd +0 であれば左から一番目の
エントリを削除、となる。

Categories: shell

No Responses so far | Have Your Say!

Comments are closed.