我有一组环境变量,需要根据shell脚本中指定的参数进行设置。 但是问题是这些变量已经在bash配置文件中定义了 例如:
bash_profile具有一个名为“ KARAN”的变量: 导出KARAN = / config / 1
现在运行shell脚本时,应该执行以下操作: 导出KARAN = / config / 2(将bash配置文件的KARAN值更改为2)
答案 0 :(得分:0)
您的问题不清楚。如果您的脚本需要将env var设置为特定值,请使用export VAR=val
。我想您想问的是如何让脚本修改当前Shell的环境。没有这两个壳的合作,这是不可能的。那是因为环境变量是由子进程继承的。但是子进程不能直接修改其父进程(或与此相关的其他随机进程)的环境。为此,两个过程必须协调数据交换。如果子进程是Shell脚本,则通常使用source
命令来完成。或者通过让子进程将一系列export
语句写入stdout并让父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
实际上是在子外壳程序中执行的,因此不会在当前外壳程序中设置vars。
答案 1 :(得分:-1)
source bash_profile_new