节点:未找到且找到依赖的运行方法

节点:未找到且找到依赖的运行方法

我并不是在寻找解决方案(好吧,这也很方便)而主要是想解释为什么它在 Linux 中以这种方式工作。

OS: Ubuntu 22.04.1 (ubuntu-22.04.1-desktop-amd64.iso)
Node.js: installed through NVM, v16.18.0

我有一个简单的 shell 脚本:

测试文件

node --eval "console.log(123)"
sleep 2

如果我通过终端运行它:

  1. 在 Nautilius 或 Nemo 中的脚本目录背景上单击鼠标右键
  2. 点击open terminal here
  3. 我们在终端的 shell 脚本文件夹中。现在输入命令./test.sh并按回车键

然后一切正常,节点被调用,我们看到123输出,并且 2 秒后 shell 脚本由于节点调用后的睡眠命令而完成。

最令人吃惊的部分(我猜对我来说)是当我想以这种方式直接从 FileManager(系统默认的 Nautilius 或已安装的 Nemo)运行该 shell 脚本时:

  1. 右键单击test.sh文件并单击Run as a Program

其结果是终端显示错误:“节点:未找到”,并且 2 秒后由于sleep命令而关闭。

为什么会有差异?第一次尝试时,终端可以看到 node.js,第二次尝试时终端看不到它。此外,如何修复它?

编辑:

我发现了一些,我之前通过终端安装了 NVM 以及一个 node.js 版本。但现在我又通过 GUI(Ubuntu 软件)安装了 Node.js,现在两种方式都可以使用。为什么?

为什么在终端中安装某些东西并不能使其在两种情况下都起作用?

答案1

问题是,通过 NVM 安装的 Node 不会出现在PATH桌面环境使用的环境变量中,而只会出现在PATH终端进程(提供 .bashrc 或类似文件)中使用的环境变量中。

这就是为什么终端进程可以node正常找到,但Right单击 +“作为程序运行”不起作用的原因:“作为程序运行”选项只是从你的 DE 继承环境,而不是你~/.bashrc自己的环境。

有关其工作原理的详细信息,请参阅这个Unix和Linux答案。显然,Ubuntu Software 安装 Node 的方式出现在PATHDE 使用的变量中。

链接的答案还提供了一种为整个 X 会话设置环境变量的方法,以便它们可供使用“作为程序运行”运行的程序使用(将它们放在中,或放在包含从和~/.xsession中获取的环境变量的单独文件中)。~/.xsession~/.bashrc

相关内容