[英]How to reload environment variable in shell script without restarting Linux server
[英]Linux shell script to change an environment variable
我正在尝试编写Linux Shell脚本,以将环境变量“ ROS_IP”更改为我的当前IP地址。
printenv | grep "ROS_IP"
返回ROS_IP=192.168.1.10
命令
ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'
返回我当前的IP地址192.168.1.2这是正确的
这是我的shell脚本
#!/bin/bash
#Command to get current IP address and set the output to a variable 'var'
var=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
#Make sure var is the correct IP
echo $var
#Set ROS_IP
export ROS_IP=$var
#end script
脚本运行后,运行命令
printenv | grep "ROS_IP"
仍返回旧的输出ROS_IP=192.168.1.10
如何解决此问题?
如果通过以下方式执行脚本,则您想要的内容将无法正常工作:
bash script.sh # won't work
要么:
./script.sh # won't work even if script has executable bit set
相反,你必须是来源 :
. script.sh
或者,如果您愿意:
source script.sh
问题是子外壳程序无法更改父外壳程序的环境。 export
命令适用于运行脚本的shell及其子shell,但不适用于其父shell。 因此,这些命令必须在父外壳程序中运行。 这就是采购的目的。
采购记录在man bash
:
。 文件名[参数]
源文件名[参数]
在当前Shell环境中从文件名读取并执行命令,并返回从文件名执行的最后一条命令的退出状态。 如果文件名不包含斜杠,则使用PATH中的文件名查找包含文件名的目录。 在PATH中搜索的文件不必是可执行的。 当bash不在posix模式下时,如果在PATH中找不到文件,则搜索当前目录。 如果shopt内置命令的sourcepath选项已关闭,则不会搜索PATH。 如果提供了任何参数,则在执行文件名时它们将成为位置参数。 否则,位置参数将保持不变。 返回状态是脚本中退出的最后一条命令的状态(如果未执行任何命令,则返回0),如果找不到或无法读取文件名,则返回false。 [加重]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.