我有一个脚本可以运行一些基于用户的git
命令npm
#!/bin/sh
/bin/su someuser -c "
cd /opt/app1/;
env -i git remote update;
env -i git pull origin dev;
cd /opt/app1/client/;
npm run build;
"
git
命令运行正确。该npm
命令运行并构建文件,但会引发很多关于
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 8.x
Found bindings for the following environments:
- Linux 64-bit with Node.js 9.x
This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass --force` to build the binding for your current environment.
如果我npm run build
从终端以用户身份运行,则一切正常。我什至在脚本中尝试过env -i npm run build
,这只是说env: ‘npm’: No such file or directory
。所以我然后尝试env -i /usr/local/bin/npm run build
并奇怪地返回了/usr/bin/env: 'node': No such file or directory
。
我虽然这user -c
会给我设置所有环境,就像用户登录一样,env -i
这会让我env
在没有父母的情况下保持干净。
也试过:
#!/bin/sh
/bin/su someuser - -c "
cd /opt/app1/;
git remote update;
git pull origin dev;
cd /opt/app1/client/;
npm run build;
"
最后一次尝试返回与第一次相同:git 命令正常工作,构建抛出关于 sass 和环境的错误,就好像我从终端以用户身份运行命令时有所不同。
知道为什么这个命令不能正常工作吗?
根据 Olorin 关于查看节点错误的建议,我对此进行了更多探索。尽管
node -v
forsomeuser
正在返回v9.4.0
并且该locate
命令没有找到v8
为任何用户安装的任何版本,并且重新安装了node
,但我仍然遇到相同的错误。以下命令有效。注意source ~/.nvm/nvm.sh;
在某一时刻,我有
nvm use v9.5.0
然后测试它仍然可以在没有它的情况下工作。接下来我删除source ~/.nvm/nvm.sh;
了它,它又被打破了。显然,如果没有采购和需要查看,nvm
则无法使用。shell-scripts
env
npm run build
nvm
奇怪的问题,看起来有些用户在使用基于此线程
nvm
的资源时遇到了类似的问题。仍然不确定它是从哪里得到的。除非它是从安装目录中获取的。例子:bash
v8
v8
include/node
v9
env -i
清理环境,其中包括PATH
变量,如果您不提供完整路径,则该变量用于查找命令。因此,使用env -i
,您需要指定被调用命令的完整路径。使用npm
,可能发生的情况是它npm
本身是一个脚本,具有#! /usr/bin/env node
作为 shebang,因此node
命令的查找失败。如果您需要清洁环境,请尝试以下任一方法:
sudo -iu someuser sh -c "...."
su someuser - -c "...."
(这两个命令都会启动登录 shell,并对环境进行一些清理)或者,使用
env
,保留一些环境变量,就像 Ubuntuservice
命令一样:您可能不需要所有这些,但请保留
$PATH
,$TERM
,也许还有 setLC_ALL=C
。