如何使用Shell脚本

时间:2019-10-02 14:03:34

标签: bash macos shell environment-variables

我有一组环境变量,需要根据shell脚本中指定的参数进行设置。 但是问题是这些变量已经在bash配置文件中定义了 例如:

bash_profile具有一个名为“ KARAN”的变量: 导出KARAN = / config / 1

现在运行shell脚本时,应该执行以下操作: 导出KARAN = / config / 2(将bash配置文件的KARAN值更改为2)

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)

您可以使用所有新定义创建新的配置文件。然后在您的Shell脚本顶部调用以下行。同样,您可以根据需要创建任意数量的配置文件。

    source bash_profile_new