![](/img/trans.png)
[英]Environment variables not visible in shell script executed using popen in c
[英]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 中設置變量。
source bash_profile_new
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.