如何在Linux中更新Envvariables?

我已经定义了一个Envvariables: export NBR_PROCESS=2

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

 #!/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 

我想要做的是通过运行脚本来减lessvariablesNBR_PROCESS。

任何想法,我在这里错过了? 谢谢 !

你必须“来源”

your_script


编辑1
看到这个答案…


编辑2

. filename [arguments] . filename [arguments]source filename [arguments]

完整的解释:

从当前shell上下文的filename参数中读取和执行命令。 如果文件名不包含斜线,则使用PATH变量来查找文件名。 当Bash不处于POSIX模式时,如果在$ PATH中找不到文件名,则搜索当前目录。 如果提供了任何参数,则在执行文件名时它们将成为位置参数。 否则,位置参数不变。 返回状态是执行的最后一个命令的退出状态,如果没有执行任何命令,返回状态为零。 如果找不到文件名或不能读取,则返回状态为非零。 这个内建相当于源代码。

每次运行脚本时,都会得到您的(或正在执行的用户)环境变量的全新副本 – 而且这些副本保留在该进程的本地。 换句话说,无论修改哪些变量,都只能修改这个实例。

如果进程创建子进程,则是一样的。 孩子们会收到一份父母的环境,他们所做的任何改变在他们离开时都会“消失”。

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

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

你可以使用bash函数或者eval或者source内建eval (间接调用export内建eval )。

阅读高级bash脚本指南