Node.js 即使在寻源和机器重启之后,.bash_profie中的变量也不会反映在node process.env中

Node.js 即使在寻源和机器重启之后,.bash_profie中的变量也不会反映在node process.env中,node.js,bash,terminal,gruntjs,Node.js,Bash,Terminal,Gruntjs,我的.bash_配置文件中有以下变量,我可以使用echo命令在mac终端上看到这些变量,但是在记录相同的变量时,我无法在node process.env中看到这些变量(除了$PATH variable)。我正在运行“sudo grunt taskName”来启动我的grunt构建任务,并试图访问gruntfile.js中的process.env。我只能看到$PATH变量和很少的根用户信息。任何线索都会有帮助 export MVN_HOME=/Users/myuser/Documents/apac

我的.bash_配置文件中有以下变量,我可以使用echo命令在mac终端上看到这些变量,但是在记录相同的变量时,我无法在node process.env中看到这些变量(除了$PATH variable)。我正在运行“sudo grunt taskName”来启动我的grunt构建任务,并试图访问gruntfile.js中的process.env。我只能看到$PATH变量和很少的根用户信息。任何线索都会有帮助

export MVN_HOME=/Users/myuser/Documents/apache-maven-3.3.9
export ANT_HOME=/Users/myuser/Documents/apache-ant-1.10.3
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/
CATALINA_HOME=/Users/myuser/Documents/apache-tomcat-8.0.52
export CATALINA_HOME
export NODE_ENV=dev
export PATH=$PATH:$CATALINA_HOME/bin
export PATH=$PATH:$MVN_HOME/bin:$ANT_HOME/bin:$JAVA_HOME
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

将这些设置放在一个单独的文件中,以便您可以从各种脚本访问它

我还建议重构脚本,使其有效
sh
script。特别是,将
导出
放在作业上是不可移植的。这样的话,比如说,
$HOME/bin/nodestuff

MVN_HOME=/Users/myuser/Documents/apache-maven-3.3.9
ANT_HOME=/Users/myuser/Documents/apache-ant-1.10.3
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/
CATALINA_HOME=/Users/myuser/Documents/apache-tomcat-8.0.52
NODE_ENV=dev
export MVN_HOME ANT_HOME CATALINA_HOME NODE_ENV
PATH=$PATH:$CATALINA_HOME/bin:$MVN_HOME/bin:$ANT_HOME/bin:$JAVA_HOME
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
# no need to export PATH, your shell already does that
在您的
.profile
中,您可以

. $HOME/bin/nodestuff
sudo
命令行中

sudo -s <<<". $HOME/bin/nodestuff; grunt taskName"

sudo-s为什么要使用sudo?即使sudo要启动bash,因为bash将以root身份运行,所以它将执行root的配置文件。@rici:我应该在哪里添加这些变量,以便使用sudo运行grunt并访问它。我需要以sudo的身份运行它,以授予grunt对某些文件夹的写入权限,我不想更改这些文件夹的默认权限。@rici:请阅读,我可以使用.bashrc或.profile文件来执行此操作。在这两者中,您有什么建议?
。Bash和
sh
共享profile
,因此更通用
.bashrc
应仅具有特定于Bash的设置。但是您不能在
.profile
中使用Bash-only语法,因此您应该修复这些语法。如果您希望环境变量通过sudo传递,请使用
sudo-E grunt
sudo grunt
不会启动外壳,所以你找错了方向。如果您不指定
-E
sudo
会清理环境以确保安全。真的,你应该组织你的文件,这样你就可以不用sudo来构建项目。把你的开发内容放在
文档中是很奇怪的。我把它放在文档中,因为这个文件夹每天都有自动备份,但在其他地方不会发生这种情况。