簡體   English   中英

導出環境變量重擊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM