RPM 安装后的 Bash 脚本问题

RPM 安装后的 Bash 脚本问题

我创建了一个 rpm 包,将 Node.js 项目提取到特定文件夹中,然后创建了一个安装后脚本,将 cd 插入该文件夹并执行“npm install --product”

#!/bin/bash
cd /opt/project
npm install --production

问题是,在 rpm 解压项目后,我收到以下错误:

/var/tmp/rpm-tmp.MbfpY5: line 3: npm: command not found
warning: %post(pack-0.0.0-1.noarch) scriptlet failed, exit status 127

当然,npm 已安装,如果我手动执行相同的脚本,它就可以工作。我读到退出状态 127 也与 selinux 策略中的错误有关,但我尝试完全禁用 selinux 并收到相同的错误。

我也有与 .deb 完全相同的代码,并且它在那里工作完美,但我无法使其在 CentOS 中工作。

知道问题可能出在哪里吗?

谢谢

答案1

首先你应该尝试关注错误

未找到 npm

你说当你执行脚本时,它会起作用 - 我想是这个:

#!/bin/bash
cd /opt/project
npm install --production 
  • 你是以普通用户还是 root 身份运行它?
  • 当你安装 rpm 时,我猜它是以 root 身份安装的。
  • 您是否尝试过将 npm 的绝对路径放入脚本中(其中 npm

如果最后一种有效,则问题是 npm 不在 root 的 PATH 变量中。您应该尝试检查它(以 root 身份):

#echo $PATH

编辑:

因此 $PATH 变量设置为正确的路径,并且当您使用 npm 的绝对路径时它可以工作。这意味着 shell 不会读取 PATH 变量来查找可执行文件(在我找到的所有 scriptlet 示例中,它们始终使用完整路径。尝试查看是否可以使用命令扩展:

#!/bin/bash
cd /opt/project
$(which npm) install --production

相关内容