gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:07:34 26 4
gpt4 key购买 nike

我已经编写了一个 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在您登录时读取。如果您刚刚编辑了这些文件,则您的更改不会应用到当前 session 。

如果你想将更改应用到当前 session ,你可以运行

. /etc/environment

在当前 shell 中设置变量。这仅在变量的值不包含任何 shell speciavairablel 字符(空格,()[]{}\|&;<>~*?'"`$#,我可能会忘记一些)的情况下才有效,因为 /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 .正如我在上面解释的那样,这通常是个坏主意。

关于bash - 在 .environment 文件中定义一个变量并在 .sh 文件中使用(引用)该变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65814292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com