簡體   English   中英

如何使用 Shell 腳本覆蓋 mac 中的環境變量

[英]How to overwrite environment variables in mac using Shell Script

我有一組環境變量需要在shell腳本中指定的arguments的基礎上進行設置。 但問題是這些變量已經在 bash 配置文件中定義,例如:

bash_profile 有一個名為“KARAN”的變量:export KARAN=/config/1

現在在運行 shell 腳本時,它應該這樣做:export KARAN=/config/2(將 bash 配置文件的 KARAN 值更改為 2)

你的問題不清楚。 如果您的腳本需要將 env var 設置為特定值,只需使用export VAR=val即可。 我想您要問的是如何讓腳本修改當前 shell 的環境。 如果沒有兩個炮彈的合作,這是不可能的。 那是因為環境變量是由子進程繼承的。 但是子進程不能直接修改其父進程(或其他一些隨機進程)的環境。 為此,兩個進程必須協調數據交換。 如果子進程是 shell 腳本,這通常通過使用source命令來完成。 或者通過讓子進程將一系列export語句寫入標准輸出並讓父 shell 捕獲並執行這些語句。 例如,假設我有一個名為set_env的腳本,它看起來像這樣

#!/bin/sh
echo export KARAN=/config_2
echo export VAR2=val2

當前的 shell 然后會做

eval $(set_env)

但是請注意, eval是危險的。 我更喜歡這樣做更安全一些:

set_env | source /dev/stdin

然而,這只適用於像 ksh 和 zsh 這樣的 shell。 由於 bash 處理管道的方式, source實際上是在子 shell 中執行的,因此不會在當前 shell 中設置變量。

您可以使用所有新定義創建一個新配置文件。 然后在 shell 腳本頂部調用以下行。 同樣,您可以根據需要創建任意數量的配置文件並使用它。

    source bash_profile_new

暫無
暫無

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

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