Closed7
minishell 勉強
execve
デーモン
envコマンド
env 引数なし
: 今設定されている環境変数を一覧で表示する。
env 引数あり
: 一時的に引数に記載されている環境変数を使う事ができる(パイプも可。ただしechoは使えなかった)。
引数は~=~
という感じで記述する。もし=のlvalueが環境変数に存在する場合は、rvalueを上書き。もし存在しない場合は、引数をenvの末尾に新規追加する。
ただしそのコマンド実行が終了した場合、引数に追加した環境変数は失われる
export 環境変数に値を追加する
setenv的なものが存在しないので、environもしくはenvironを移したchar **に対して、文字列を追加していくことになる。
この場合だと、environのグローバル変数に直接値を入れ続けたらどうなるのか
→新規追加された値はヒープに値が確保されるらしい
export, env引数なしの挙動の違い
前提として、export引数ありの機能
exportで環境変数を保存する。形式key = value
みたいな感じ。
また以下のような実行も可能
export a
export a =
- 出力方式
- envはenvironを並び替えないで直接出力する
- exportは接頭辞として "declere -x"がつく。valueの値はダブルクオーテーションがつく。またアルファベット順に並び替える。大文字→アンダーバー→小文字 (その他どの記号が追加できるか不明。ちなみに数字は無理)
- exportした値の出力
env
-
$1 = $2
といった方式でexportした場合、同じ形式で出力される。 -
export a="b"
と保存された場合でもダブルクオーテーションはつけないで出力する - 以下のように
=
が存在しないexportをした場合は、envでは出力しない。 - exportされた値がどの列に入って出力されるかは不明 ← ここ調べるべき
export a
- 以下のように
=
のみでexportされたときは、a=
と表示される
export a =
export
-
$1 = $2
といった方式でexportした場合、$1 = "$2"
として出力される。 - 常に並び替えが行われる
-
export a="b"
と保存された場合でもダブルクオーテーションはつけないで出力する - 以下のように
=
が存在しないexportをした場合でもexportコマンドでは出力する。仮にexport l
とした場合の出力はdeclare -x l
- 以下のように
=
のみでexportされたときは、a=""
と表示される
export a =
getcwdに入っている値はmallocで割り当てられたものなのでfreeが必要
POSIX.1-2001 標準の拡張として、 glibc では buf が NULL の場合、 getcwd() は必要なバッファーを malloc(3) を用いて動的に割り当てる
このスクラップは2022/05/04にクローズされました