/usr/bin/bash: Difference between revisions

No edit summary
Line 20: Line 20:
:オプションを指定すると、シェルは対話型になる。
:オプションを指定すると、シェルは対話型になる。
;-l         
;-l         
:bash をログイン・シェルとして起動したかのように動作させる(後述の '''[[#INVOCATION|INVOCATION]]''' を参照)。
:bash をログイン・シェルとして起動したかのように動作させる(後述の '''[[#INVOCATION|INVOCATION ]]''' を参照)。
;-r         
;-r         
:オプションを指定すると、シェルが制限される(後述の'''[[#RESTRICTED SHELL|RESTRICTED SHELL]]'''を参照)。
:オプションを指定すると、シェルが制限される(後述の'''[[#RESTRICTED SHELL|RESTRICTED SHELL ]]'''を参照)。
;-s
;-s
:オプションがある場合、またはオプション処理後に引数が残っていない場合、コマンドは標準入力から読み込まれる。 このオプションにより、対話型シェルを起動するときや、 パイプ経由で入力を読み込むときに、位置パラメーターを設定できる。
:オプションがある場合、またはオプション処理後に引数が残っていない場合、コマンドは標準入力から読み込まれる。 このオプションにより、対話型シェルを起動するときや、 パイプ経由で入力を読み込むときに、位置パラメーターを設定できる。
Line 34: Line 34:
これらは、現在のロケールがCでもPOSIXでもない場合に言語変換の対象となる文字列である。 これは-nオプションを意味し、コマンドは実行されない。
これらは、現在のロケールがCでもPOSIXでもない場合に言語変換の対象となる文字列である。 これは-nオプションを意味し、コマンドは実行されない。
;<nowiki>[-+]O [shopt_option]</nowiki>
;<nowiki>[-+]O [shopt_option]</nowiki>
:shopt_optionは、shopt組み込み関数が受け付けるシェル・オプションの1つである(後述の'''[[#SHELL BUILTIN COMMANDS|SHELL BUILTIN COMMANDS]]'''参照)。 shopt_option が存在する場合、-O はそのオプションの値を設定する;
:shopt_optionは、shopt組み込み関数が受け付けるシェル・オプションの1つである(後述の'''[[#SHELL BUILTIN COMMANDS|SHELL BUILTIN COMMANDS ]]'''参照)。 shopt_option が存在する場合、-O はそのオプションの値を設定する;
:+Oで設定を解除する。 shopt_option が与えられない場合、 shopt が受け付けるシェルオプションの名前と値が標準出力に表示される。 起動オプションが +O の場合、出力は入力として再利用できる形式で表示される。
:+Oで設定を解除する。 shopt_option が与えられない場合、 shopt が受け付けるシェルオプションの名前と値が標準出力に表示される。 起動オプションが +O の場合、出力は入力として再利用できる形式で表示される。
:-- はオプションの終了を知らせ、それ以降のオプション処理を無効にする。 の後の引数は、ファイル名と引数として扱われる。 '-'の引数は''--''と等価である。
:-- はオプションの終了を知らせ、それ以降のオプション処理を無効にする。 の後の引数は、ファイル名と引数として扱われる。 '-'の引数は''--''と等価である。
Line 49: Line 49:
;--init-file file
;--init-file file
;--rcfile file
;--rcfile file
:シェルが対話型の場合、システム全体の初期化ファイル[[/etc/bash.bashrc]]と標準の個人用初期化ファイル~/.bashrcの代わりに、ファイルからコマンドを実行する(下記の'''[[#INVOCATION|INVOCATION]]'''を参照)。
:シェルが対話型の場合、システム全体の初期化ファイル[[/etc/bash.bashrc]]と標準の個人用初期化ファイル~/.bashrcの代わりに、ファイルからコマンドを実行する(下記の'''[[#INVOCATION|INVOCATION ]]'''を参照)。
;--login
;--login
:-lと同等である。
:-lと同等である。
Line 57: Line 57:


;--noprofile
;--noprofile
:システム全体の起動ファイル[[/etc/profile]]や、個人用の初期化ファイル~/.bash_profile、~/.bash_login、~/.profileを読み込まない。 デフォルトでは、bashはログイン・シェルとして起動されたときにこれらのファイルを読み込む(後述の'''[[#INVOCATION|INVOCATION]]'''を参照)。
:システム全体の起動ファイル[[/etc/profile]]や、個人用の初期化ファイル~/.bash_profile、~/.bash_login、~/.profileを読み込まない。 デフォルトでは、bashはログイン・シェルとして起動されたときにこれらのファイルを読み込む(後述の'''[[#INVOCATION|INVOCATION ]]'''を参照)。


;--norc  
;--norc  
:シェルが対話型の場合、システム全体の初期化ファイル[[/etc/bash.bashrc]]と個人の初期化ファイル~/.bashrcを読み込んで実行しない。 シェルが sh として起動された場合、このオプションはデフォルトでオンになる。
:シェルが対話型の場合、システム全体の初期化ファイル[[/etc/bash.bashrc]]と個人の初期化ファイル~/.bashrcを読み込んで実行しない。 シェルが sh として起動された場合、このオプションはデフォルトでオンになる。
;--posix
;--posix
:デフォルトの動作がPOSIX標準と異なるbashの動作を標準に合わせるように変更する(posixモード)。 posixモードがbashの動作にどのような影響を与えるかについての詳細は、後述の'''[[#SEE ALSO|SEE ALSO]]'''を参照のこと。
:デフォルトの動作がPOSIX標準と異なるbashの動作を標準に合わせるように変更する(posixモード)。 posixモードがbashの動作にどのような影響を与えるかについての詳細は、後述の'''[[#SEE ALSO|SEE ALSO ]]'''を参照のこと。


;--restricted
;--restricted
:シェルが制限された状態になる(下記の'''[[#RESTRICTED SHELL|RESTRICTED SHELL]]'''を参照)。
:シェルが制限された状態になる(下記の'''[[#RESTRICTED SHELL|RESTRICTED SHELL ]]'''を参照)。


;--verbose
;--verbose
Line 119: Line 119:


== RESERVED WORDS ==
== RESERVED WORDS ==
予約語はシェルにとって特別な意味を持つ語である。 以下の単語は、引用符で囲まれておらず、コマンドの最初の単語(以下の [[#SHELL GRAMMAR|SHELL GRAMMAR]] を参照)、case または select コマンドの 3 番目の単語(in のみ有効)、for コマンドの 3 番目の単語(in と do のみ有効)のいずれかに指定されている場合に予約語として認識される:
予約語はシェルにとって特別な意味を持つ語である。 以下の単語は、引用符で囲まれておらず、コマンドの最初の単語(以下の [[#SHELL GRAMMAR|SHELL GRAMMAR ]] を参照)、case または select コマンドの 3 番目の単語(in のみ有効)、for コマンドの 3 番目の単語(in と do のみ有効)のいずれかに指定されている場合に予約語として認識される:


<code>! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]</code>
<code>! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]</code>
Line 134: Line 134:
:<code>[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]</code>
:<code>[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]</code>


commandの標準出力は、パイプを経由してcommand2の標準入力に接続される。 この接続は、コマンドで指定されたリダイレクション(後述の'''[[#REDIRECTION|REDIRECTION]]'''を参照)の前に実行される。
commandの標準出力は、パイプを経由してcommand2の標準入力に接続される。 この接続は、コマンドで指定されたリダイレクション(後述の'''[[#REDIRECTION|REDIRECTION ]]'''を参照)の前に実行される。
もし|&が使われると、commandの標準出力に加えて、commandの標準エラーもパイプを通してcommand2の標準入力に接続される。 この標準エラーから標準出力への暗黙のリダイレクトは、コマンドによって指定されたリダイレクトの後に実行される。
もし|&が使われると、commandの標準出力に加えて、commandの標準エラーもパイプを通してcommand2の標準入力に接続される。 この標準エラーから標準出力への暗黙のリダイレクトは、コマンドによって指定されたリダイレクトの後に実行される。


Line 144: Line 144:
シェルがposixモードの場合、timeの後に改行が続くことがある。 この場合、シェルはシェルとその子シェルが消費したユーザー時間とシステム時間の合計を表示する。  TIMEFORMAT 変数を使用して、時間情報の書式を指定することができる。
シェルがposixモードの場合、timeの後に改行が続くことがある。 この場合、シェルはシェルとその子シェルが消費したユーザー時間とシステム時間の合計を表示する。  TIMEFORMAT 変数を使用して、時間情報の書式を指定することができる。


パイプラインの各コマンドは、別々のプロセスとして(つまりサブシェルで)実行される。 サブシェル環境の説明については、'''[[#COMMAND EXECUTION ENVIRONMENT|COMMAND EXECUTION ENVIRONMENT]]'''を参照のこと。 shopt 組み込み関数を使用して lastpipe オプションを有効にすると (後述の shopt の説明を参照)、パイプラインの最後の要素をシェルプロセスで実行することができる。
パイプラインの各コマンドは、別々のプロセスとして(つまりサブシェルで)実行される。 サブシェル環境の説明については、'''[[#COMMAND EXECUTION ENVIRONMENT|COMMAND EXECUTION ENVIRONMENT ]]'''を参照のこと。 shopt 組み込み関数を使用して lastpipe オプションを有効にすると (後述の shopt の説明を参照)、パイプラインの最後の要素をシェルプロセスで実行することができる。


=== Lists ===
=== Lists ===
Line 171: Line 171:


;(list)  
;(list)  
:リストはサブシェル環境で実行される(後述の「[[#COMMAND  EXECUTION  ENVIRONMENT|COMMAND  EXECUTION  ENVIRONMENT]]」を参照)。
:リストはサブシェル環境で実行される(後述の「[[#COMMAND  EXECUTION  ENVIRONMENT|COMMAND  EXECUTION  ENVIRONMENT ]]」を参照)。
シェルの環境に影響を与える変数割り当てや組み込みコマンドは、コマンドの完了後には有効にならない。 リターン・ステータスは list の終了ステータスである。
シェルの環境に影響を与える変数割り当てや組み込みコマンドは、コマンドの完了後には有効にならない。 リターン・ステータスは list の終了ステータスである。


Line 187: Line 187:
:<nowiki>[[</nowiki>と一緒に使用すると、<nowiki>< and ></nowiki> 演算子は、現在のロケールを使用して辞書順にソートする。
:<nowiki>[[</nowiki>と一緒に使用すると、<nowiki>< and ></nowiki> 演算子は、現在のロケールを使用して辞書順にソートする。


:パラメータの扱い(パラメータの欠落など)については、test組み込みコマンドの説明(後述の「[[#SHELL BUILTIN COMMANDS|SHELL BUILTIN COMMANDS]]」セクション)を参照のこと。
:パラメータの扱い(パラメータの欠落など)については、test組み込みコマンドの説明(後述の「[[#SHELL BUILTIN COMMANDS|SHELL BUILTIN COMMANDS ]]」セクション)を参照のこと。


:演算子 <nowiki>==</nowiki> および <nowiki>!=</nowiki> が使用されると、演算子の右側の文字列はパターンとみなされ、 extglob シェル・オプションが有効であるかのように、後述の「パターン・マッチング」の規則に従ってマッチングされる。 nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチングが行われる。
:演算子 <nowiki>==</nowiki> および <nowiki>!=</nowiki> が使用されると、演算子の右側の文字列はパターンとみなされ、 extglob シェル・オプションが有効であるかのように、後述の「パターン・マッチング」の規則に従ってマッチングされる。 nocasematchシェルオプションが有効な場合、アルファベットの大文字小文字を区別せずにマッチングが行われる。
Line 212: Line 212:


;<nowiki>for name [ [ in [ word ... ] ] ; ] do list ; done</nowiki>
;<nowiki>for name [ [ in [ word ... ] ] ; ] do list ; done</nowiki>
:inに続く単語のリストが展開され、項目のリストが生成される。 変数名はこのリストの各要素に順番に設定され、その都度listが実行される。 inが省略された場合、forコマンドは設定された位置パラメーター(後述の[[#PARAMETERS|PARAMETERS]]を参照)ごとにlistを1回実行する。 戻りステータスは、最後に実行されたコマンドの終了ステータスである。 inに続く項目の展開の結果、リストが空になった場合、コマンドは実行されず、リターン・ステータスは0となる。
:inに続く単語のリストが展開され、項目のリストが生成される。 変数名はこのリストの各要素に順番に設定され、その都度listが実行される。 inが省略された場合、forコマンドは設定された位置パラメーター(後述の[[#PARAMETERS|PARAMETERS ]]を参照)ごとにlistを1回実行する。 戻りステータスは、最後に実行されたコマンドの終了ステータスである。 inに続く項目の展開の結果、リストが空になった場合、コマンドは実行されず、リターン・ステータスは0となる。


;for (( expr1 ; expr2 ; expr3 )) ; do list ; done
;for (( expr1 ; expr2 ; expr3 )) ; do list ; done
Line 219: Line 219:


;select name <nowiki>[ in word ]</nowiki> ; do list ; done
;select name <nowiki>[ in word ]</nowiki> ; do list ; done
:inに続く単語のリストが展開され、項目のリストが生成される。 展開された単語のセットは標準エラーに出力される。 inが省略された場合、位置パラメーターが表示される(後述の[[#PARAMETERS|PARAMETERS]]を参照)。 次にPS3プロンプトが表示され、標準入力から1行が読み込まれる。 その行が、表示された単語の1つに対応する数字で構成されている場合、nameの値はその単語に設定される。  行が空の場合、単語とプロンプトが再度表示される。 EOFが読み込まれると、コマンドは完了する。 それ以外の値が読み込まれると、nameにはnullが設定される。 読み込まれた行は変数REPLYに保存される。 リストは、breakコマンドが実行されるまで、選択のたびに実行される。 selectの終了ステータスは、リスト内で最後に実行されたコマンドの終了ステータスであり、コマンドが実行されなかった場合は0である。
:inに続く単語のリストが展開され、項目のリストが生成される。 展開された単語のセットは標準エラーに出力される。 inが省略された場合、位置パラメーターが表示される(後述の[[#PARAMETERS|PARAMETERS ]]を参照)。 次にPS3プロンプトが表示され、標準入力から1行が読み込まれる。 その行が、表示された単語の1つに対応する数字で構成されている場合、nameの値はその単語に設定される。  行が空の場合、単語とプロンプトが再度表示される。 EOFが読み込まれると、コマンドは完了する。 それ以外の値が読み込まれると、nameにはnullが設定される。 読み込まれた行は変数REPLYに保存される。 リストは、breakコマンドが実行されるまで、選択のたびに実行される。 selectの終了ステータスは、リスト内で最後に実行されたコマンドの終了ステータスであり、コマンドが実行されなかった場合は0である。


;<nowiki>case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac</nowiki>
;<nowiki>case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac</nowiki>
Line 238: Line 238:
:<nowiki>coproc [NAME] command [redirections]</nowiki>
:<nowiki>coproc [NAME] command [redirections]</nowiki>


これはNAMEという名前のコプロセスを作成する。 NAME が与えられない場合、デフォルトの名前は COPROC である。  NAME は、 command が単純コマンド(上記を参照のこと)の場合は与えてはならない。 コプロセスが実行されると、シェルは実行中のシェルのコンテキスト内に NAME という名前の配列変数(後述の「配列」を参照)を作成する。 コマンドの標準出力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子が<nowiki>NAME[0]</nowiki>に代入される。 コマンドの標準入力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子が <nowiki>NAME[1]</nowiki>に割り当てられる。  このパイプは、コマンドで指定されたリダイレクション(後述の[[#REDIRECTION|REDIRECTION]]を参照)の前に確立される。
これはNAMEという名前のコプロセスを作成する。 NAME が与えられない場合、デフォルトの名前は COPROC である。  NAME は、 command が単純コマンド(上記を参照のこと)の場合は与えてはならない。 コプロセスが実行されると、シェルは実行中のシェルのコンテキスト内に NAME という名前の配列変数(後述の「[[#Arrays|Arrays ]]」を参照)を作成する。 コマンドの標準出力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子が<nowiki>NAME[0]</nowiki>に代入される。 コマンドの標準入力は、実行シェルのファイル記述子にパイプで接続され、そのファイル記述子が <nowiki>NAME[1]</nowiki>に割り当てられる。  このパイプは、コマンドで指定されたリダイレクション(後述の[[#REDIRECTION|REDIRECTION ]]を参照)の前に確立される。
ファイル記述子は、標準的な単語展開を使って、シェルコマンドやリダイレクションの引数として利用できる。 コマンドとプロセス置換を実行するために作成されたもの以外では、ファイル記述子はサブシェルでは利用できない。 コプロセスを実行するために生成されたシェルのプロセス ID は、変数 '''NAME_PID''' の値として利用できる。 wait 組み込みコマンドは、コプロセスの終了を待つために使用できる。
ファイル記述子は、標準的な単語展開を使って、シェルコマンドやリダイレクションの引数として利用できる。 コマンドとプロセス置換を実行するために作成されたもの以外では、ファイル記述子はサブシェルでは利用できない。 コプロセスを実行するために生成されたシェルのプロセス ID は、変数 '''NAME_PID''' の値として利用できる。 wait 組み込みコマンドは、コプロセスの終了を待つために使用できる。


Line 248: Line 248:
;<nowiki>fname () compound-command [redirection]</nowiki>
;<nowiki>fname () compound-command [redirection]</nowiki>
;<nowiki>function fname [()] compound-command [redirection]</nowiki>
;<nowiki>function fname [()] compound-command [redirection]</nowiki>
:これはfnameという名前の関数を定義する。 予約語のfunctionは省略可能である。  関数の予約語を指定した場合、括弧は省略可能である。 関数の本体は複合コマンドcompound-commandである(上記の複合コマンドを参照のこと)。 このコマンドは通常{と}の間のコマンドのリストであるが、1つの例外を除いて、上記の「複合コマンド」にリストされているコマンドであれば何でもよい: compound-commandは、fnameが単純コマンドの名前として指定されると、必ず実行される。 posixモードでは、fnameは有効なシェル名でなければならず、POSIX特殊組み込み関数の名前であってはならない。 デフォルトモードでは、関数名は$を含まない引用符で囲まれていないシェル語であれば何でもよい。 関数定義時に指定されたリダイレクション(後述の[[#REDIRECTION|REDIRECTION]]を参照)は、関数実行時に実行される。 構文エラーが発生するか、同じ名前の読み取り専用関数が既に存在しない限り、関数定義の終了ステータスは0である。 実行されると、関数の終了ステータスは、ボディ内で最後に実行されたコマンドの終了ステータスになる。 (後述の[[#FUNCTIONS|FUNCTIONS ]]を参照のこと)。
:これはfnameという名前の関数を定義する。 予約語のfunctionは省略可能である。  関数の予約語を指定した場合、括弧は省略可能である。 関数の本体は複合コマンドcompound-commandである(上記の[[#Compound Commands|Compound Commands ]]を参照のこと)。 このコマンドは通常{と}の間のコマンドのリストであるが、1つの例外を除いて、上記の「複合コマンド」にリストされているコマンドであれば何でもよい: compound-commandは、fnameが単純コマンドの名前として指定されると、必ず実行される。 posixモードでは、fnameは有効なシェル名でなければならず、POSIX特殊組み込み関数の名前であってはならない。 デフォルトモードでは、関数名は$を含まない引用符で囲まれていないシェル語であれば何でもよい。 関数定義時に指定されたリダイレクション(後述の[[#REDIRECTION|REDIRECTION ]]を参照)は、関数実行時に実行される。 構文エラーが発生するか、同じ名前の読み取り専用関数が既に存在しない限り、関数定義の終了ステータスは0である。 実行されると、関数の終了ステータスは、ボディ内で最後に実行されたコマンドの終了ステータスになる。 (後述の[[#FUNCTIONS|FUNCTIONS ]]を参照のこと)。


== COMMENTS ==
== COMMENTS ==