在.environment文件中定义一个变量,并在.sh文件中使用(引用)该变量



我已经写了一个bash脚本来创建一个文件夹,如果它不存在,并在我的环境文件中设置了变量,并在我的。sh文件

中引用了它下面是我的脚本,我在。sh文件中添加了变量,我在我的环境文件中添加了变量。

#!/bin/bash
if [ ! -d "$checkfolder" ]; then
mkdir -p "$createfolder";
fi

我已经在/etc/environment文件中设置了以下环境变量

checkfolder=/home/ubuntu/hello23
createfolder=/home/ubuntu/hello23

当我执行脚本,我得到以下错误:

ubuntu@:~/cicd$ ./createfolder.sh 
mkdir: cannot create directory ‘’: No such file or directory

这是我写的正常脚本,如果它不存在,它会工作并创建一个文件夹

if [ ! -d /home/ubuntu/hello ]; then
mkdir -p /home/ubuntu/hello;
fi

这里的问题是什么,我应该做什么改变?

登录时读取/etc/environment~/.pam_environment。如果你刚刚编辑了这些文件,你的修改不会应用到当前会话。

如果要将更改应用到当前会话,可以运行

. /etc/environment

设置当前shell中的变量。只有当变量的值不包含任何shell专用字符(空格,()[]{}|&;<>~*?'"`$#和我可能忘记了一些)时,这才有效,因为/etc/environment的语法只是shell语法的近似值。

如果您添加了新的变量,而不只是改变它们的值,您还需要导出它们(shell中的VAR=value只创建一个shell变量,而不是一个环境变量)。

export MY_HOME checkfolder createfolder

或更普遍的

export $(sed -n 's/^([A-Za-z0-9_]*)=.*/1/p')

不存在为每个新程序设置环境的文件,因为这会破坏环境的意义,即每个进程都有自己的环境,它从其父进程继承而来。如果有一个"全局环境文件",就不可能在不同的环境中运行程序。如果需要全局配置,请读取配置文件:

if [ -e ~/.my_application_configuration.sh ]; then
. ~/.my_application_configuration.sh
fi
有一种方法可以让一个文件为每个bash脚本(仅是bash脚本,不包括sh脚本)设置环境:将文件的完整路径放在环境变量BASH_ENV中。正如我上面所解释的,这通常是一个坏主意。

相关内容

  • 没有找到相关文章

最新更新