[英]Exporting environmental variables bash
我正在嘗試創建一個bash腳本,該腳本每次運行時都會切換輸出(對於polybar中的某些功能)。 我認為最簡單的方法是基於環境變量的值,但是它沒有按預期工作。
這是我編寫的要測試的腳本,假定該腳本由其他程序運行,並且可以訪問env變量。
echo $STATE
if [[ $STATE == "public" ]]; then
echo foo
export STATE='private'
elif [[ $STATE == "private" ]]; then
echo bar
export STATE='public'
fi
echo $STATE
我想要的輸出是
$ ./test.sh
public
foo
private
$ ./test.sh
private
bar
public
但實際輸出是
$ ./test.sh
public
foo
private
$ ./test.sh
public
foo
private
似乎export
調用不是持久的
您的腳本作為當前shell的子級運行。 子進程不能直接修改其父級的環境。 其中包括環境變量,當前工作目錄,信號處理方式等。 進程只能修改其環境,也可以隱式修改其啟動的任何進程的環境。
腳本中的export
工作正常。 但是它只會修改該腳本或它生成的任何子進程(例如其他腳本)的值。 根據定義,它不能在其父進程中更改值。
解決方案1:將該腳本實現為Shell函數。 由於函數在當前shell的上下文中運行,因此它們可以修改其狀態,包括其env vars。
解決方案2:將STATE
值存儲在用戶主目錄中的類似點文件的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.