我现在正在编写一个git hook的项目,它的运行是接收来自github等平台的push POST请求,然后在本机执行一些命令。我是用nodejs写的,其中命令的执行是通过child_process模块的spawn方法,执行时可以指定用户。现在的主要问题是,很难获取类似于启动bash或者通过ssh登录那样的全环境。举个例子,HOME变量不是指定用户的家目录;再举个例子,引入了莫名其妙的SUDO_USER变量。
假设我要执行的命令是git pull
,然后用户是abc
。我目前想到的是下面的方法:
-
首先,编写一个shell脚本
script.sh
:# first unset all environment variables for i in `env | sed 's/=.*//'` ; do unset $i done # next do some startups source /etc/profile source /home/abc/.bashrc # ... some other files need to be sourced ...
-
其次,在node.js中这样调用命令:
child_process.spawn('startup.sh && git pull')
这样编写主要是不够优雅地道,而且也不知道是否准确。总之,寻求一种更加优雅和准确的解决这个问题的思路。多谢!
node封装env传递给spawn, e.g.
spawn('<cmd>', [..args], {env: process.env})