在 .environment 文件中定义一个变量并在 .sh 文件中使用(引用)该变量
Define a variable in the .environment file and use (refrence) that in the .sh file
我已经编写了一个 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_]*\)=.*//p')
没有为每个新程序设置环境的文件,因为这会违背环境的要点,即每个进程都有自己的从其父进程继承的环境。如果有一个“全局环境文件”,将无法 运行 具有不同环境的程序。如果要全局配置,读一个配置文件:
if [ -e ~/.my_application_configuration.sh ]; then
. ~/.my_application_configuration.sh
fi
有一种方法可以为每个 bash 脚本 (仅 bash 脚本,而不是 sh 脚本)创建一个设置环境 的文件:环境变量 BASH_ENV
中文件的完整路径。正如我在上面解释的那样,这通常是个坏主意。
我已经编写了一个 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_]*\)=.*//p')
没有为每个新程序设置环境的文件,因为这会违背环境的要点,即每个进程都有自己的从其父进程继承的环境。如果有一个“全局环境文件”,将无法 运行 具有不同环境的程序。如果要全局配置,读一个配置文件:
if [ -e ~/.my_application_configuration.sh ]; then
. ~/.my_application_configuration.sh
fi
有一种方法可以为每个 bash 脚本 (仅 bash 脚本,而不是 sh 脚本)创建一个设置环境 的文件:环境变量 BASH_ENV
中文件的完整路径。正如我在上面解释的那样,这通常是个坏主意。