首页 > 解决方案 > 从 bash 或节点写入终端环境

问题描述

目标

我想编写一个脚本,提示用户输入一些信息,IE 大小、形状、颜色,然后将其放在该终端的环境中。也许最重要的是,我还想在 npm 脚本中运行这个脚本。

例子

包.json

"scripts":{
   "fillVars": "source theThing.bs",
   "echoVarsHoursLater": "echo $theSize" //etc
}

theThing.bs

read -p "Size: " theSize
read -p "Shape: " theShape
read -p "Color: " theColor

笔记

然后我希望这些环境变量可用于之后从同一终端运行的任何脚本或代码。不只是从该脚本中。如果可能,也不要从操作系统中的任何地方(也就是其他终端或会话)。

我知道如果我直接在终端中获取 theThing.bs,我可以让它工作。但我不知道如何通过 npm 脚本部分。

这在很大程度上是一个方便的工具,但它对这个过程非常有帮助。

标签: linuxbashbuildenvironment-variablesnpm-scripts

解决方案


如果没有父进程的合作,UNIX 环境模型会使您所做的事情变得不可能。出于安全原因,子进程不能直接操纵其父进程的环境,包括其环境变量。通常的解决方案是让子进程编写一系列 shell 语句来设置环境变量并让父 shell “eval”命令。例如,如果您编写了一个名为my_env_initwhich did

echo export MY_SIZE=42

你会告诉用户输入

eval $(my_env_init)

当您像 NPM 程序一样在中间有任意层时,您尝试做的基本上是不可能的。因为它也必须收集您的环境设置脚本编写的命令并将这些命令回显到顶级 shell。你以错误的方式解决这个问题,但没有人能够提供正确的答案,因为你的问题没有充分解释你为什么要这样做。


推荐阅读