iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
1

前言

昨天已經實作完 取(get) 環境變數的部分,今天來談談怎麼 存(set) 環境變數,也就是設置環境變數

export and unset

在 Linux 中可以下 export VAR=value 來設置新的變數

跟他相對應的 unset VAR 則是用來刪除一個變數

實作

如前兩天說到的:因為環境變數是 Process 狀態的一部分,所以也不能另外開 Child Process 來做,而是以內建指令的方式來實現

會用到的 function

  • os.Setenv(key, value string)

    Setenv 的功能跟他的名字一樣,就是設定環境變數,參數是一組 key/value,等等會用來實作 export

  • os.Unsetenv(key string)

    Setenv 對應的是 Unsetenv,看要把哪個變數刪掉就把它的 key 傳進去,等等會用來實作 unset

func executeInput(input string) error {
    input = os.ExpandEnv(input)
    args := strings.Split(input, " ")

    // 如果指令是 export 開頭
    // 就用 os.Setenv 設置環境變數
    // args = ["export", "FOO=bar"]	
    if args[0] == "export" {
        // kv = ["FOO", "bar"]
        kv := strings.Split(args[1], "=")
        
        // key = "FOO"
        // val = "bar"
        key, val := kv[0], kv[1]

        err := os.Setenv(key, val)
        return err
    }

    // 如果指令是 unset 開頭
    // 就用 os.Unsetenv 刪除環境變數
    // args = ["unset", "FOO"]
    if args[0] == "unset" {
        err := os.Unsetenv(args[1])
        return err
    }

    cmd := exec.Command(args[0], args[1:]...)

    // ...
}

Demo

export FOO=bar

unset FOO

小結

今天用 os.Setenvos.Unsetenv 完成設置環境變數的功能,commit 放在這裡,有什麼問題歡迎在下面留言,沒問題的話就明天見囉


上一篇
Day10-存取環境變數(一)
下一篇
Day12-alias 指令別名(一)
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單30

尚未有邦友留言

立即登入留言