nodejs child_process调用中如何获取bash全环境?

发布于 2022-09-05 05:26:23 字数 870 浏览 15 评论 0

我现在正在编写一个git hook的项目,它的运行是接收来自github等平台的push POST请求,然后在本机执行一些命令。我是用nodejs写的,其中命令的执行是通过child_process模块的spawn方法,执行时可以指定用户。现在的主要问题是,很难获取类似于启动bash或者通过ssh登录那样的全环境。举个例子,HOME变量不是指定用户的家目录;再举个例子,引入了莫名其妙的SUDO_USER变量。

假设我要执行的命令是git pull,然后用户是abc。我目前想到的是下面的方法:

  1. 首先,编写一个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 ...
  2. 其次,在node.js中这样调用命令:

    child_process.spawn('startup.sh && git pull')

这样编写主要是不够优雅地道,而且也不知道是否准确。总之,寻求一种更加优雅和准确的解决这个问题的思路。多谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羁客 2022-09-12 05:26:23

node封装env传递给spawn, e.g. spawn('<cmd>', [..args], {env: process.env})

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文