我已经定义了一个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脚本指南