linux 安装 nodejs,为什么环境变量 NODE_MAJOR 无法被填充?-灵析社区

爱打瞌睡的三角龙

我按照这里的 `https://github.com/nodesource/distributions` 方式在 `ubuntu22.04` 上安装 nodejs 和 npm ![图片.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/e8308e838c5c0606f7ba70bab84cc1b0.png) 但是遇到了问题,当我执行下面的命令 NODE_MAJOR=18 echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list 我发现 NODE_MAJOR 并没有填充 pon@T4GPU:~/code/me/reflex_example$ cat /etc/apt/sources.list.d/nodesource.list deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_.x nodistro main 可以看到,结果不是 `https://deb.nodesource.com/node_18.x` 而是 `https://deb.nodesource.com/node_.x` > 我用的是 bash 为什么把 NODE_MAJOR=18 加在命令开头却不行,理论上,这也是一种正确传递环境变量的方式之一? * * * 加个分号也可以, 但是在使用 python 的时候,是可以不加 `;` pon@T4GPU:~/code/me/reflex_example$ NODE_MAJOR=18; echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main 难道是因为,不加分号,只对该 shell 的子进程可见,shell 本身不可见? * * * 比如我写一个 python 程序 `main.py` import os print(os.environ['RUN_MODE']) 然后调用 pon@T4GPU:~/code/me/reflex_example$ python main.py Traceback (most recent call last): File "/home/pon/code/me/reflex_example/main.py", line 2, in print(os.environ['RUN_MODE']) ~~~~~~~~~~^^^^^^^^^^^^ File "", line 679, in __getitem__ KeyError: 'RUN_MODE' pon@T4GPU:~/code/me/reflex_example$ RUN_MODE=prd python main.py prd 可以看到直接 `python main.py` 会报错,但是 `RUN_MODE=prd python main.py` 是正常的

阅读量:305

点赞量:8

问AI
NODE_MAJOR=18 echo "deb ... https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" 这里 "$NODE_MAJOR" 的替换是在当前的 bash 进程里完成的。而命令开始的 "MAJOR=18" 只影响新启动的 "echo" 进程。所以 "$NODE_MAJOR" 是替换不了的。 *** "NODE_MAJOR=18; ... " 里的 "NODE_MAJOR=18" 是一个独立的赋值语句,他会影响当前 shell 的环境。在其之后执行的所有进程都可以看到 "NODE_MAJOR" 的值。 (上面 "NODE_MAJOR=18 echo ..." 的里 "NODE_MOJOR=18" 是临时的,它只影响后面的 "echo" 。) *** "NODE_MOJOR=18 python ..." ,这个例子里,"python" 进程已经可以看到 "NODE_MAJOR=18" 的值了。所以其内部是可以用它做替换的。