我有一个包含以下内容的 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 的环境没有任何变化。