Bash Basics | Basicsトップページ | トップページ
コマンド
シェル内で実装され、シェル自身がコマンドを解釈して実行を行う組み込みコマンドと外部のファイルとしてコマンドが提供されている外部コマンドの2つがあります。
組み込みコマンドはシェル内部で実装されているため、コマンドの実体(ファイル)が存在しませんが、外部コマンドはOS上にファイルとして実体が存在します。いくつかのコマンドは組み込みコマンドと外部コマンドの両方で提供されているものもあり、それぞれの機能に差があることもあります。
また、同じ機能であった場合でも組み込みコマンドはシェル自身が内部で処理を行うため、新たなプロセスを生成しません。そのため、外部コマンドに比べて実行速度が速いという特徴があります。
ユーザーからのコマンド入力はターミナルと呼ばれる端末(プログラム)から行います。
コマンドは引き数(コマンドに続けて指定されるオプションやデータなど)を持つことがあり、実行終了時には終了ステータスを返します。
単純なコマンドはシェルの文法で示したように変数の代入とコマンド名とそれに続く引き数リスト(引き数リストは省略可能)を指定して記述します。
指定可能な引き数はそれぞれのコマンドで定義されており、オプションと呼ばれるコマンドの動作を変える指定を行うことができるものもあります。
シェルから実行されるコマンドや関数は終了する際に0から255までの整数値を返すことができ、呼び出し元に返されるこの値を終了ステータスと言います。
シェルは終了ステータスが0の場合、正常終了とみなし、0以外の場合をエラーや失敗とみなします。
コマンドや関数によっては正常終了でも0以外を返すものがあるため、詳細はそれぞれのコマンドや関数のマニュアルページなどを確認してください。
シェル内では変数$?を参照することで直前に実行されたコマンドや関数の終了ステータスを確認することが可能です。
コマンドがシグナルを受信してデフォルトの挙動として終了した場合には、受信したシグナル番号 + 128の終了ステータスとなります。
コマンドが見つからなかった場合には、終了ステータスとして127が返されます。コマンドが見つかったにもかかわらず(権限エラーなどで)実行できなかった場合には、終了ステータスとして126が返されます。
展開やリダイレクションの際にエラーが発生し、コマンドの実行が失敗した場合には、0より大きい終了ステータスが返されます。
組み込みコマンドは実行が正常に終了した場合には、終了ステータスとして0を返し、実行中にエラーが発生した場合には、終了ステータスとして0以外を返します。また、正しくない使い方をしようとした場合には、終了ステータスとして2を返します。
シェルを終了する組み込みコマンドとしてexitを呼び出すことで明示的に終了ステータスを指定することが可能です。
関数を終了する場合には、exitではなくreturnを使用します。
sourceコマンドで現在のシェルに読み込まれるスクリプトを終了する場合には、returnを呼び出すことで終了ステータスを指定して呼び出した現在のシェルに戻ることが可能です。sourceコマンドで呼び出されたスクリプト内でexitが呼び出されると現在のシェルごと終了します。
Linuxではコマンドなどの動作や引き数を説明する二種類のドキュメントがあります。
$ man man
MAN(1) マニュアルページユーティリティー MAN(1)
名前
man - オンラインマニュアルのインターフェース
書式
man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I]
[--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P
pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justifi‐
cation] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z]
[[section] page ...] ...
man -k [apropos options] regexp ...
man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
man -f [whatis options] page ...
man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t]
[-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ...
man -w|-W [-C file] [-d] [-D] page ...
man -c [-C file] [-d] [-D] page ...
man [-?V]
説明
Manual page man(1) line 1 (press h for help or q to quit)
$ LANG=C man man
MAN(1) Manual pager utils MAN(1)
NAME
man - an interface to the on-line reference manuals
SYNOPSIS
man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I]
[--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P
pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justifi‐
cation] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z]
[[section] page ...] ...
man -k [apropos options] regexp ...
man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
man -f [whatis options] page ...
man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t]
[-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ...
man -w|-W [-C file] [-d] [-D] page ...
man -c [-C file] [-d] [-D] page ...
man [-?V]
DESCRIPTION
Manual page man(1) line 1 (press h for help or q to quit)
セクション | 含まれる内容 |
---|---|
1 | 実行プログラムまたは、シェルコマンド |
2 | システムコール |
3 | ライブラリ |
4 | 特殊ファイル、デバイスファイル |
5 | ファイルの書式 |
6 | ゲーム、スクリーンセーバー |
7 | その他 |
8 | システム管理コマンド |
$ man 2 exit
_EXIT(2) Linux Programmer's Manual _EXIT(2)
名前
_exit, _Exit - 呼び出し元のプロセスを終了させる
書式
#include
void _exit(int status);
#include
void _Exit(int status);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
_Exit():
_XOPEN_SOURCE >= 600 || _ISOC99_SOURCE ||
_POSIX_C_SOURCE >= 200112L;
または cc -std=c99
説明
_exit() は、それを呼んだプロセスを「直ちに」終了させる。
その際、このプロセスが所有しているディスクリプタ (descriptor) で、
オープンされているものは全てクローズされる。
また、このプロセスが所有する子プロセスは全て、プロセス番号 1、 つまり
init プロセスによって継承され、このプロセスの親プロセスに対して SIGCHLD
シグナルが送出される。
status
の値は、このプロセスの終了状態としてその親プロセスに対して返され、
wait(2) 系関数を利用することによって取得することができる。
関数 _Exit() は _exit() と等価である。
返り値
これらの関数は値を返さない。
準拠
SVr4, POSIX.1-2001, 4.3BSD. 関数 _Exit() は C99 で導入された。
注意
exit の効果、終了状態の受渡し、ゾンビプロセス、シグナル送出などに
ついての議論は、 exit(3) を参照すること。
関数 _exit() は exit(3) に似ているが、ANSI C の atexit(3) や
on_exit(3) によって登録されたいかなる関数も呼び出さない。 標準 I/O
バッファのフラッシュや、 tmpfile(3)
で作成されたテンポラリファイルの削除を行うかどうかは、実装に依存する。
一方で、 _exit()
はオープンされているファイルディスクリプタをクローズしないため、
未決定になっている出力がフラッシュされるのを待つのに不確定な遅れが発生す
る。
この遅れを発生させたくなければ、 _exit() の前に tcflush(3)
のような関数を呼び出せばよい。 _exit() が呼び出された時に、
未決定になっている全ての I/O がキャンセルされるのか、 またどの I/O
がキャンセルされるのかは実装に依存する。
バージョン 2.3 より前の glibc では、 _exit()
のラッパー関数は同じ名前のカーネル・システムコールを起動していた。
glibc 2.3 以降では、プロセス内の全てのスレッドを終了するために、
ラッパー関数は exit_group(2) を起動する。
関連項目
execve(2), exit_group(2), fork(2), kill(2), wait(2), wait4(2), wait‐
pid(2), atexit(3), exit(3), on_exit(3), termios(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部
である。プロジェクトの説明とバグ報告に関する情報は http://www.ker‐
nel.org/doc/man-pages/ に書かれている。
Linux 2010-09-20 _EXIT(2)
$ man 3 exit
EXIT(3) Linux Programmer's Manual EXIT(3)
名前
exit - プロセスの正常終了
書式
#include
void exit(int status);
説明
exit() 関数は、プロセスを正常に終了させ、 status & 0377
という値を親プロセスへ返す (wait(2) を参照)。
atexit(3) や on_exit(3) によって
登録された全ての関数は、それらが登録された順番と逆順にコールされる。
(登録された関数の中で atexit(3) or on_exit(3) を使って exit
処理中に実行される追加の関数を登録することができる;
新規に登録された関数は、この後で実行される関数リストの先頭に
追加される。) これらの関数の一つが返らなかった場合 (例えば、その関数が
_exit(2) を呼び出したり、シグナルで自分自身を kill した場合)、
残りの関数はどれも呼び出されず、それ以降の exit 処理 (特に stdio(3)
ストリームのフラッシュなど) は中止される。 ある関数が atexit(3) や
on_exit(3) を使って複数回登録されていた場合、
その関数は登録されたのと同じ回数だけ呼び出される。
オープン中の stdio(3)
ストリームは全てフラッシュされて、クローズされる。 tmpfile(3)
によって作成されたファイルは削除される。
C 標準では EXIT_SUCCESS と EXIT_FAILURE という 2つの定数が
定義されている。それぞれ正常終了と異常終了を示すもので、 exit()
として渡すことができる。
返り値
exit() 関数は返らない。
準拠
SVr4, 4.3BSD, POSIX.1-2001, C89, C99.
注意
atexit(3) や on_exit(3) を使って登録された関数の中で exit() か
longjmp(3) が呼び出された場合、 何が起こるかは未定義である。 execve(2)
を呼び出すと、 atexit(3) や on_exit(3)
を使って登録された関数が削除される点に注意すること。
EXIT_SUCCESS と EXIT_FAILURE を使うと、0 や (1 や -1 といった) 0
以外の値を使うのに比べて (UNIX 以外の環境に)
移植するのがいくらか簡単になる。 特に VMS は別の方式を用いている。
BSD は終了コードを標準化しようとしている; を参照すること。
exit() の後、親プロセスに終了ステータスが渡されなければならない。
終了ステータスの渡し方には 3 つの場合がある。 親プロセスが SA_NOCLDWAIT
を設定した場合、 または SIGCHLD ハンドラを SIG_IGN に設定した場合、
ステータスは破棄される。 親プロセスが子プロセスの終了を待っている場合、
親プロセスに終了ステータスが伝えられる。 どちらの場合でも exit
のプロセスは直ちに終了する。 「終了ステータスを関知せず終了も待たない」
ということを親プロセスが指示していない場合、 exit プロセスは
(終了ステータスを表す 1 バイトのみを保持する)
「ゾンビ」プロセスになる。 これにより、後から wait(2)
関数を呼び出すことで、 親プロセスは終了ステータスを知ることができる。
SIGCHLD シグナルのサポートが実装されている場合、
このシグナルは親プロセスに送られる。 親プロセスが SA_NOCLDWAIT
を設定した場合、 SIGCHLD シグナルが送られるかどうかは定義されていない。
そのプロセスがセッションのリーダーで、
そのプロセスの制御端末がそのセッションの制御端末である場合、
この制御端末のフォアグラウンドプロセスグループにある 各プロセスに
SIGHUP シグナルが送られ、端末がセッションから切り離される。
これにより新しい制御プロセスを取得することができる。
プロセスが終了することにより、プロセスグループが孤立して、
そのグループのメンバーのうちのどれかが停止した場合、
プロセスグループの各プロセスに対して SIGHUP シグナルが送られ、続いて
SIGCONT シグナルが送られる。 孤立した (orphaned)
プロセスグループの説明は setpgid(2) を参照。
関連項目
_exit(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部
である。プロジェクトの説明とバグ報告に関する情報は http://www.ker‐
nel.org/doc/man-pages/ に書かれている。
Linux 2013-02-14 EXIT(3)
$ info
File: dir Node: Top This is the top of the INFO tree
This (the Directory node) gives a menu of major topics.
Typing "q" exits, "?" lists all Info commands, "d" returns here,
"h" gives a primer for first-timers,
"mEmacs" visits the Emacs topic, etc.
In Emacs, you can click mouse button 2 on a menu item or cross reference
to select it.
* Menu:
Archiving
* Cpio: (cpio). Copy-in-copy-out archiver to tape or disk.
* Tar: (tar). Making tape (or disk) archives.
Basics
* Common options: (coreutils)Common options.
* Coreutils: (coreutils). Core GNU (file, text, shell) utilities.
* Date input formats: (coreutils)Date input formats.
* File permissions: (coreutils)File permissions.
Access modes.
-----Info: (dir)Top, 2048 lines --Top-------------------------------------------
Welcome to Info version 5.1. Type h for help, m for menu item.
/bashと入力して、"bash"を検索した状態
System administration
* Which: (which). Show full path of commands.
* parted: (parted). GNU partitioning software
Texinfo documentation system
* Info: (info). Documentation browsing system.
* Pinfo: (pinfo). curses based lynx-style info browser.
Miscellaneous
* bash: (bash). The Bourne Again Shell.
* bc: (bc). The GNU calculator language.
* dc: (dc). The GNU RPN calculator.
* time: (time). GNU time Utility
Text creation and manipulation
* Diffutils: (diffutils). Comparing and merging files.
* Gawk: (gawk). A text scanning and processing language.
* grep: (grep). Print lines matching a pattern.
* sed: (sed). Stream EDitor.
Utilities
-----Info: (dir)Top, 2048 lines --98%-------------------------------------------
bashの組み込みコマンドについてはhelpコマンドで参照することが可能です。
manコマンドもinfoコマンドも外部コマンドです。