我已经定义了一个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。
知道我错过了什么吗?谢谢!
答案 0 :(得分:4)
你必须“来源”
来源your_script
编辑1
见this answer...
编辑2
. filename [arguments]
要么
source filename [arguments]
从当前的filename参数中读取并执行命令 shell语境。如果filename不包含斜杠,则为PATH变量 用于查找文件名。当Bash不处于POSIX模式时,当前 如果在$ PATH中找不到文件名,则搜索目录。如果有的话 提供参数,它们成为时的位置参数 文件名已执行。否则位置参数是 不变。返回状态是最后一个命令的退出状态 执行,如果没有执行命令则为零。如果文件名不是 发现或无法读取,返回状态为非零。这内置 相当于来源。
答案 1 :(得分:2)
脚本(或任何可执行文件)不能更改shell的环境变量,因为它在不同的(子)进程中运行。改变shell内环境的唯一方法是通过export
内置。您还可以使用env
命令设置某些程序的环境,例如env YOURVAR=1 yourprogram yourarguments
...
您可以使用bash函数或eval
或source
内置函数(间接调用export
内置函数。)
答案 2 :(得分:2)
每次运行脚本时,它都会获得您(或正在执行的用户)环境变量的新副本 - 并且它们保留在该过程的本地。换句话说,只修改了修改的变量。
如果进程创建子进程,则相同。孩子们会收到父母环境的副本,他们所做的任何更改都会在退出时“消失”。
正如Luc M所说,您可以使用source
让您的脚本作为Tlc进程执行。这将允许所述脚本的内容也影响您的环境。