亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

os.Getenv 和 os.LookupEnv 不返回 $HISTFILE

os.Getenv 和 os.LookupEnv 不返回 $HISTFILE

Go
小唯快跑啊 2022-12-05 17:16:10
我正在使用zsh,并且正在嘗試訪問這些環境變量:$ echo $HISTFILE/home/amir/.zsh_history$ echo $HISTSIZE50000$ echo $SAVEHIST10000但是os.LookupEnv返回"", false所有三個,并且os.Getenv自然地返回一個空字符串:package mainimport (    "fmt"    "os")func main() {    histfile, found := os.LookupEnv("HISTFILE")    if found {        fmt.Println(histfile)    } else {        fmt.Println("$HISTFILE not found")    }    histsize, found := os.LookupEnv("HISTSIZE")    if found {        fmt.Println(histsize)    } else {        fmt.Println("$HISTSIZE not found")    }    savehist, found := os.LookupEnv("SAVEHIST")    if found {        fmt.Println(savehist)    } else {        fmt.Println("$SAVEHIST not found")    }}$ go run main.go$HISTFILE not found$HISTSIZE not found$SAVEHIST not found現在,如果我export將這些變量放入$HOME/.zshrc:$ grep -iE "histfile|histsize|savehist" $HOME/.zshrcexport HISTFILE="$HOME/.zsh_history"export HISTSIZE=1000000export SAVEHIST=1000000然后它工作并返回正確的值:$ go run hyst.go/home/amir/.zsh_history10000001000000當我沒有顯式導出這些變量時,$HISTSIZE和的值$SAVEHIST是不同的,但它們不為空。那么為什么這些函數會為這些變量返回空字符串呢?
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

這是因為$HISTFILE、$HISTSIZE和$SAVEHIST不是默認情況下的環境變量,而只是通過以下方式設置的shell 變量oh-my-zsh:


## History file configuration

[ -z "$HISTFILE" ] && HISTFILE="$HOME/.zsh_history"

[ "$HISTSIZE" -lt 50000 ] && HISTSIZE=50000

[ "$SAVEHIST" -lt 10000 ] && SAVEHIST=10000

這些是您在使用inecho之前使用時看到的值。export$HOME/.zshrc


區分環境變量和 shell 變量很重要:


子進程可以訪問環境變量,但 shell 變量不能。您可以通過簡單地創建一個子進程來驗證此語句:


$ # Child processes don't inherit shell variables

$ key=value; sh -c 'echo "key=$key"'

key=


$ # They do, however, inherit environment variables

$ export key=value; sh -c 'echo "key=$key"'

key=value

為了能夠訪問子進程中的 shell 變量,您可以export這樣做,就像您在以下代碼中所做的那樣$HOME/.zshrc:


$ key=value; export key; sh -c 'echo "key=$key"'

key=value

現在,要查看特定變量是否為環境變量echo,您可以直接檢查environment 變量列表,而不是使用 。


$ env | grep -i "shell"; echo $?

SHELL=/usr/bin/zsh

0

事實上$SHELL,環境變量也是如此?,F在對于歷史變量:


$ env | grep -iE "histfile|histsize|savehist"; echo $?

1

退出代碼為 1,表示無法在環境變量列表中找到這些名稱。


查看完整回答
反對 回復 2022-12-05
  • 1 回答
  • 0 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號