シェル変数と環境変数
シェル変数
有効範囲は変数を定義したシェル、プロセスのみ。当該のシェルプロセスを終了するとシェル変数は失われる。
環境変数
有効範囲は変数を定義したシェル上、およびそのシェルで実行されるプログラム。 export
コマンドで設定できる。
$ export HOGE="hoge"
仮に子プロセスで環境変数を変更しても、親プロセスへの変更は行われない。
変数についてあれこれ
# 変数定義 $ HOGE=hoge # 変数の出力 $ echo $HOGE # 変数の削除($はつけない!) $ unset HOGE # 環境変数を一覧で表示する $ env # 環境変数、シェル変数両方を表示 $ set # シェル変数を環境変数としてエクスポート($はつけない!) $ export HOGE # 変数定義とexport と同時に行う $ export FUGA=fuga
内部コマンドと外部コマンド
cd
はシェル自体に組み込まれているコマンドでこのようなコマンドを 内部コマンド という。
一方、 ls
はそれ単独で独立したプログラムとして存在しており、このようなコマンドを 外部コマンド という。
例: ls のファイルの場所は /bin/ls
コマンドの実行あれこれ
# コマンドを続けて実行(失敗してもそのまま実行される) $ pwd; ls # 1番目が成功したときだけ2番目を実行する $ ls prog/ruby && pwd # 1番目が失敗したときだけ2番目を実行する $ cat temp || echo "file not found" # date, pwd, ls の実行結果をまるごと result.log に出力する $ (date; pwd; ls) > result.log
引用符と展開あれこれ
# シングルクォーテーション内は文字列として認識される $ echo '$HOGE' HOGE # ダブルクォーテーション内の文字列は展開される可能性がある # $を使った変数の展開 $ echo "$HOGEはほげ" hogeはほげ # $をそのまま出力したい場合は\でエスケープ $ echo "\$HOGEの中身は$HOGE" $HOGEの中身はhoge # バッククォートを使ったコマンドの展開 $ echo "カレントディレクトリは `pwd` です" カレントディレクトリは /home/hoge です # 変数の中にコマンド文字列を入れて展開できる $ FUGA=pwd $ echo "カレントディレクトリは `FUGA` です" カレントディレクトリは /home/hoge です # コマンドの展開もう一つ $ echo "カレントディレクトリは $(pwd) です" カレントディレクトリは /home/hoge です
プロセスとジョブ
プロセス
動作中のプログラムをOSが管理する基本的な単位のこと。
ジョブ
コマンドやプログラムをユーザーがシェル上で実行するひとまとまりの単位のこと。
シェル上で1つのコマンドを実行したときも、複数のコマンドをパイプで繋いだときも、いずれも1つのジョブとなる。
ジョブはフォアグラウンドもしくはバックグラウンドで実行される。