linux - 在centos linux中永久设置和编辑环境变量

标签 linux bash centos environment-variables

我正在尝试在 bash 脚本中设置和编辑永久环境变量, 将 export VAR="demo"添加到 .bash_profile 用于设定永久目的, 但我无法编辑此变量,

想法是编写脚本来设置或编辑此文件中是否存在。

暂时尝试了这段代码,但没有成功:

VARIABLE_FILE=/root/.bash_profile
if [ -f ${VARIABLE_FILE} ] ; then
   . ${VARIABLE_FILE}
   if [ ! -z "${USER_PROMPT}" ] ; then
      export USER_PROMPT="haloooo"
      echo "USER PROMPT : $USER_PROMPT"
      # Prints the correct value but doesn't update .bash_profile
   fi
fi

最佳答案

这些命令不会修改任何文件 - 如果文件存在,它们会读取文件,然后仅在当前上下文中导出变量,并将值打印到标准输出(通常是终端)。

不建议以编程方式修改点文件,因为实际代码与打印代码(在修改脚本中)混合在一起,您可能会遇到许多微妙的错误,而且您实际上无法确定目标文件是否包含使您的脚本出现意外行为的内容。这一点,再加上无法以普通用户身份登录的危险,通常是避免这种情况的充分理由。您已收到警告。

要真正做到这一点,您可以简单地在文件末尾添加一个新行,其中包含变量的新值:

echo "USER_PROMPT=haloooo" >> "$VARIABLE_FILE"

这将导致重复的条目,但如果您只是将文本和变量放在变量定义中,它至少应该是快速的,并且相当安全只要您的文件始终以换行符结尾 .

更高级的版本是替换该行(如果存在):

if grep '^USER_PROMPT=' -- "$VARIABLE_FILE"
then
    sed -i -e 's/^USER_PROMPT=.*/USER_PROMPT=haloooo/' -- "$VARIABLE_FILE"
else
    echo "USER_PROMPT=haloooo" >> "$VARIABLE_FILE"
fi

请注意,如果您想在替换值中放置任意文本,您必须确保 escape it for sed .此外,此命令将覆盖以 USER_PROMPT= 开头的每一行,因此如果您希望它在脚本的不同时间具有不同的值(变量重用通常是邪恶的)你刚刚引入了一个错误。如果你需要,你可以试试 replacing only the last occurrence .

更高级的版本可能能够处理缩进代码,检查代码是否是字符串或注释的一部分,以及其他功能,但最后,要可靠地执行此操作,您必须解析语言结构,这在 Bash 中并不容易。

关于linux - 在centos linux中永久设置和编辑环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770758/

相关文章:

linux - DNF 缺少配置管理器命令

linux - 用于在不同终端中运行脚本中的每个命令的 Shell 脚本

linux - 如何在远程服务器上使用 gpg 签名 key ?

linux - 使用shell加载变量替换占位符

linux - 如何在 shell 脚本中导入两个库?

linux - 为什么需要在 Datastax Cassandra 中关闭交换?

python包没有安装在使用ubuntu的虚拟环境中

linux - 我需要从 Linux 服务器删除所有非 php 文件或下载它们

bash - 运行 Git 命令时无法读取 ' '

python - 如何在 Linux 中使用虚拟 IP 地址发送 HTTP 请求?