在我的后端Express服务器中,我尝试使用execSync执行github cli命令,但它挂起了。'
execSsnc("gh auth login --web")
'
在同一台机器上,当我使用terminal执行相同的命令时,它工作得很好。事实上,我尝试过在一个简单的nodejs项目中执行这行代码,它也工作得很好。但是每当我在我的express服务器中使用它时,它就挂在那里。我尝试过使用spawn,exec,spawnSync也是,但是到目前为止没有运气。另外,当我使用execSync("gh auth status")
时,这会给出错误,说当前没有github主机。但是在机器中,当我从终端运行此命令时,它说我已经使用个人访问令牌登录了它。2因此我发现从Express服务器运行登录命令是主要问题。3有什么办法吗?
2条答案
按热度按时间rhfm7lfc1#
首先,检查将
GH_DEBUG
设置为1
或api
是否会生成任何冗长的日志,这可能会对问题有所帮助。其次,检查另一个
exec
在Express.js中执行时的身份,并将其与您的命令行环境进行比较(在该环境中它确实可以工作)使用
gh auth login --token < aTokenFile
(将令牌作为stdin to your execSync call传递)可能比--web
更好。pdtvr36n2#
请注意,
execSync
创建了一个新shell,并在此shell中执行gh
命令。根据操作系统的不同,
execSync
使用的shell可能与您的终端使用的shell(bash/sh)不同,或者缺少一些您的终端中可用的env变量。这可能解释了"gh auth status"
执行显示不同结果的原因。尝试验证Express应用程序中的环境变量是否与终端中的环境变量不同