如何在Linux中更新Env变量?

时间:2012-08-27 16:21:24

标签: linux bash

我已经定义了一个Env变量: export NBR_PROCESS=2

基本上我应该能够更新变量,但是当我执行以下脚本时,每次运行都得到相同的结果:

#!/bin/bash
echo "Script 2: Before decrement : $NBR_PROCESS"
export NBR_PROCESS=$(($NBR_PROCESS - 1))
echo "Script 2: After decrement : $NBR_PROCESS"

在每次执行时,我得到相同的结果:

Script 2: Before decrement : 2
Script 2: After decrement : 1

我想要做的是通过运行脚本来减少变量NBR_PROCESS。

知道我错过了什么吗?谢谢!

3 个答案:

答案 0 :(得分:4)

你必须“来源”

来源your_script


编辑1
this answer...


编辑2

. filename [arguments] 要么 source filename [arguments]

Complete explanations:

  

从当前的filename参数中读取并执行命令   shell语境。如果filename不包含斜杠,则为PATH变量   用于查找文件名。当Bash不处于POSIX模式时,当前   如果在$ PATH中找不到文件名,则搜索目录。如果有的话   提供参数,它们成为时的位置参数   文件名已执行。否则位置参数是   不变。返回状态是最后一个命令的退出状态   执行,如果没有执行命令则为零。如果文件名不是   发现或无法读取,返回状态为非零。这内置   相当于来源。

答案 1 :(得分:2)

脚本(或任何可执行文件)不能更改shell的环境变量,因为它在不同的(子)进程中运行。改变shell内环境的唯一方法是通过export内置。您还可以使用env命令设置某些程序的环境,例如env YOURVAR=1 yourprogram yourarguments ...

您可以使用bash函数或evalsource内置函数(间接调用export内置函数。)

阅读advanced bash scripting guide

答案 2 :(得分:2)

每次运行脚本时,它都会获得您(或正在执行的用户)环境变量的新副本 - 并且它们保留在该过程的本地。换句话说,只修改了修改的变量。

如果进程创建子进程,则相同。孩子们会收到父母环境的副本,他们所做的任何更改都会在退出时“消失”。

正如Luc M所说,您可以使用source让您的脚本作为Tlc进程执行。这将允许所述脚本的内容也影响您的环境。