linux - 从 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 脚本部分。
这在很大程度上是一个方便的工具,但它对这个过程非常有帮助。
解决方案
如果没有父进程的合作,UNIX 环境模型会使您所做的事情变得不可能。出于安全原因,子进程不能直接操纵其父进程的环境,包括其环境变量。通常的解决方案是让子进程编写一系列 shell 语句来设置环境变量并让父 shell “eval”命令。例如,如果您编写了一个名为my_env_init
which did
echo export MY_SIZE=42
你会告诉用户输入
eval $(my_env_init)
当您像 NPM 程序一样在中间有任意层时,您尝试做的基本上是不可能的。因为它也必须收集您的环境设置脚本编写的命令并将这些命令回显到顶级 shell。你以错误的方式解决这个问题,但没有人能够提供正确的答案,因为你的问题没有充分解释你为什么要这样做。
推荐阅读
- python - 如何附加两个包含相同列数据但不同列名的数据框对象?
- reactjs - 更新 aws-amplify 后出现错误
- php - 使用 IIS 在 Windows 上执行 PHP
- python - 重新排序 pandas 数据框中的行子集(重新索引)
- python - 使用重量衰减在pytorch中保存模型
- python - 使用 pandas 的产品库存项目
- paypal - PayPal 订阅和智能支付按钮——添加描述/元数据
- javascript - 使用 Javascript 返回 SharePoint 2013 当前用户
- ruby-on-rails - 如何在将 Child 关联到 Rails 中的 Parent 之前创建一个 Child?
- function - OCaml 矩阵操作