环境变量在 shell 脚本中时似乎未设置

环境变量在 shell 脚本中时似乎未设置

我有一个包含以下内容的 shell 脚本文件./bin/postactivate

#!/bin/sh

export STATIC_ROOT="/webapps/tsango/static/"
export MEDIA_ROOT="/webapps/tsango/media/"
export DATABASE_NAME="tsango"
export DJANGO_SETTINGS_MODULE="tsango.settings.vagrant"
export DATABASE_PASSWORD="password"
export BROKER_URL="amqp://tsango:password@localhost/tsango"
export DATABASE_USER="tsango"

我用命令执行它sudo sh ./bin/postactivate。该命令似乎运行正常,即命令行没有输出。

但是,当我用来printenv查看环境变量列表时,脚本的任何变量都没有设置。

我可能错过了一些东西......你能告诉我什么吗?

答案1

您应该将脚本调用为

source bin/postactivate

进程有环境变量。让我们假设您的 shell 的进程 ID 为 1003。您调用sudo sh ./bin/postactivate. PID 1003 分叉创建一个新进程,例如 1108。进程 1108 调用exec将自身更改为sudo.sudo然后将其自身更改sh为处理您的脚本。所以PID 1108设置环境变量为自己例如 STATIC_ROOT。然后它退出。等待 1108 的 shell (PID 1003) 会打印一个新提示,但 PID 1003 的环境没有任何变化。

相关内容