我已经写了一个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
中。正如我上面所解释的,这通常是一个坏主意。