簡體   English   中英

如何從 bash 的其他命令的 output 設置多個環境變量?

[英]How to set multiple environment variables from output of other command in bash?

我設置了一個包含多個值的變量。 (這是我從heroku config --shell得到的,已編輯)
保存命令 output 的命令是

envvars=`heroku config --shell -a heroku-app`

echo "$envvars"結果是這樣的:

BH_SERVER=000000000000000000
DATABASE_URL='postgres://stringno1:randomstring1@someserver.com:5432/randomstring2'
DISCORD_TOKEN=some.veryveryveryvery.long.token.string
EXM_SERVER=000000000000000001
MUTED_SERVER='000000000000000002, 000000000000000003'
SUPER_USER='000000000000000004, 000000000000000005'
TEST_SERVER=000000000000000006
TZ=Asia/Seoul

現在我想將這些值設置為環境變量。 這些不能是永久性的,因為這些只需要 python 應用程序,稍后將在腳本中執行。 我想我可以使用=作為分隔鍵和值的分隔符,但不能 100% 確定這一點。 (不知道 heroku convar 效果如何)

我希望這些像 output。

echo $BH_SERVER
# 000000000000000000
echo $DATABASE_URL
# postgres://stringno1:randomstring1@someserver.com:5432/randomstring2
# Note that there is no ' in start and end of line
echo $DISCORD_TOKEN
# some.veryveryveryvery.long.token.string
# Note that . is still there.
echo $MUTED_SERVER
# 000000000000000002, 000000000000000003
# Even if there is space in string, it should be treated as one line
# Also, there is no ' in start and end of line
echo $TZ
# Asia/Seoul
# / is not interpreted. I think this is normal.

有一些已經回答的問題,但我沒有找到任何符合我條件的答案。

我放了git-bash標簽,因為我正在研究 Git Bash 但我認為這個問題的解決方案與 Bash 相同。

您可以使用eval 確保使用雙引號,否則帶有空格和引號的設置將被破壞。

eval "$envvars"

或者

eval "$(heroku config --shell -a heroku-app)"

您可以使用子shell 來隔離對一段代碼的更改。

# Parentheses create a subshell, or child process.
# Variables set in a child process don't affect the parent.
(
    eval "$(heroku config --shell -a heroku-app)"
    echo "$BH_SERVER"
    echo "$DATABASE_URL"
    echo "$DISCORD_TOKEN"
    echo "$MUTED_SERVER"
    echo "$TZ"
)

# The variables will be unset here.

您可以將 echo output 添加到臨時文件中,獲取文件,然后刪除臨時文件:

echo $envvars > /tmp/tmp.env && source /tmp/tmp.env && rm /tmp/tmp.env

如果在 gitbash /tmp 上不可用,請使用另一個可用路徑來創建臨時文件

或者,您可以使用以下不需要臨時文件的格式

echo $envvars | source /dev/stdin

我不確定,但這應該可以

eval $(echo $envvars) ./script.sh

或者

eval $(echo $envvars) python script.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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