この文書で説明するために必要な用語、機能を説明します。
環境変数は
PATH=/usr/bin:/bin
のように変数名と値がイコールで繋がったものです。
この環境変数はシェルに対して設定し、シェルから実行されるコマンドにも設定され、引き継がれていきます。
"export" 内部コマンドをいつ使うのか、よく判っていないと思われるコードを見ることがあります。
"pstree" コマンドを使う事で、プロセスの親子関係を
余談ですが、C言語でmain関数を記述する場合、通常は
int main(int argc, char** argv)
と書きます。
しかし環境変数を参照するための"envp"を追加した、
int main(int argc, char** argv, char** envp)
という書き方もあります。
いまとなっては古い書き方ですが、これは元来プログラムは外部の状況を知るために環境変数を利用するという枠組みがUNIX系OSでは準備されていた事を表しています。
シェルスクリプト内部で扱う変数がシェル変数です。
実行するコマンドに伝える必要がなければ
export
に並べて書く必要はありません。
無闇に
export
を使う事は避けましょう。
"/bin", "/usr/bin"などのディレクトリに存在する実体のあるコマンドを外部コマンドと呼びます。 外部コマンドが存在しても、シェルによっては後述する内部コマンドが代りに実行される場合があります。
シェルの内部に実装されていて、外部コマンドと同様に扱える機能を差して内部コマンドと呼びます。 bashを使っていれば $ help で内部コマンドの一覧と使い方を確認する事ができます。
$ help
... umask [-p] [-S] [mode] unalias [-a] name [name ...] unset [-f] [-v] [name ...] until COMMANDS; do COMMANDS; done variables - Some variable names an wait [n] while COMMANDS; do COMMANDS; done { COMMANDS ; }
例えば"/usr/bin/which"はスクリプトで、bashでは外部コマンドとして実行されますが、tcshでは内部コマンドが準備されているため"which"を実行しても"/usr/bin/which"は起動されません。 "echo"コマンドはbash, tcsh両方で内部コマンドとして動き、 $ echo -e test の挙動は両方で異なります。
Created: 2009-12-12, Last modified: 2010-03-19
www.yasundial.org by Yasuhiro ABE is licensed under a Creative Commons Attribution 2.1 Japan License. Permissions beyond the scope of this license may be available at http://www.yasundial.org/info/license.html.