gpt4 book ai didi

bash - 在 shell 脚本 OS X 中设置环境变量

转载 作者:行者123 更新时间:2023-12-04 16:17:08 35 4
gpt4 key购买 nike

我正在尝试创建一个 Shell 脚本来自动化我的本地开发环境。我需要它启动一些进程(Redis、MongoDB 等),设置环境变量,然后启动本地 Web 服务器。我在 OS X El Capitan 上工作。

到目前为止,一切都在工作,除了环境变量。这是脚本:

#!/bin/bash

# Starting the Redis Server
if pgrep "redis-server" > /dev/null
then
printf "Redis is already running.\n"
else
brew services start redis
fi

# Starting the Mongo Service
if pgrep "mongod" > /dev/null
then
printf "MongoDB is already running.\n"
else
brew services start mongodb
fi

# Starting the API Server
printf "\nStarting API Server...\n"
source path-to-file.env
pm2 start path-to-server.js --name="api" --watch --silent

# Starting the Auth Server
printf "\nStarting Auth Server...\n"
source path-to-file.env
pm2 start path-to-server.js --name="auth" --watch --silent

# Starting the Client Server
printf "\nStarting Local Client...\n"
source path-to-file.env
pm2 start path-to-server.js --name="client" --watch --silent
.env文件使用格式 export VARIABLE="value"
根本没有设置环境变量。但是,如果我运行确切的命令 source path-to-file.env在运行脚本之前,它就可以工作了。我想知道为什么该命令可以独立工作但不在 shell 脚本中。

任何帮助,将不胜感激。

最佳答案

执行脚本时,它在子shell 中执行,当子shell 退出时,它的环境设置将丢失。如果你想从脚本配置你的交互式 shell,你必须 source交互式 shell 中的脚本。

$ source start-local.sh

现在环境应该出现在你的交互式 shell 中。如果您希望子shell 继承该环境,您还必须 export任何需要的变量。因此,例如,在 path-to-file.env 中,您需要这样的行:
export MY_IMPORTANT_PATH_VAR="/example/blah"

关于bash - 在 shell 脚本 OS X 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044604/

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