繁体   English   中英

Linux Shell脚本来更改环境变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM