scala - 如何在 Scala 中获取 .bashrc / .profile 变量
问题描述
我无法从 Scala 访问 ~/.bashrc 或 ~/.profile 中的环境变量。如何从 Scala 进程访问环境变量?我也无法像这样更新路径:
Process("myProgram", None, "PATH"-> ".:/path/to/myProgram").!!
但是,这有效:
Process("/path/to/myProgram",None).!!
工作正常。但是,当 myProgram 依赖于设置的某些环境变量时,这将不再起作用。
- 如何从 Scala 程序中更改 PATH 变量?
- 更好的是,如何让 Scala 从 .bashrc 或 .profile 访问环境变量。目前这些都不可用。
感谢您的时间和帮助
解决方案
如何从 Scala 进程访问环境变量?
该util.Properties
对象提供了 3 种不同的方法来检查 Scala 进程/程序继承的环境变量。这是一个例子:
util.Properties.envOrNone("LC_COLLATE")
//res0: Option[String] = Some(POSIX)
如何从 Scala 程序中更改 PATH 变量?
一个正在运行的进程不允许改变它自己的环境,但它可以启动一个修改了环境的新进程。有几种不同的方法可以解决这个问题。
一种是在调用目标命令之前启动您选择的 shell 并使用 shell 语法进行修改。
import sys.process._
Seq("sh", "-c", "PATH=$PATH:$HOME/Progs myProg").!!
// a single arg:^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
或者,您可以将环境 mods 作为参数提供给众多重载Process.apply()
方法之一。
import scala.sys.process._
Process("./myProg"
,new java.io.File("/full/path/to")
,"PATH"->s"${Properties.envOrElse("PATH",".")}:/full/path/to"
).!!
...我可以让 Scala 从
.bashrc
or访问环境变量.profile
吗?
如果您的 Scala 程序是从具有适当环境的 shell 启动的,那么从您的程序启动的每个进程都应该继承相同的。如果,无论出于何种原因,您的程序没有继承一个设备齐全的环境,那么最简单的方法就是启动一个设备齐全的 shell 来启动目标命令。
import scala.sys.process._
Seq("sh", "-c" , ". $HOME/.bashrc && myProg").!!
推荐阅读
- docker - 如何从同一个 docker 容器同时运行 neo4j 和 flask webapplication
- android - 视频播放时的 FPS 计数器
- visual-studio-code - 如何在 debian 9 上安装 VSCODE?没有任何效果
- bash - 将正则表达式替换分配给bash中的变量的正确方法
- ruby-on-rails - Rails 5:如何从另一个 yaml 配置文件中引用 I18n 翻译?
- c - usb_device.c 文件的微芯片问题,出现我无法解决的错误
- python - 无法在python中按名称获取进程的PID
- apache-poi - 使用 AspectJ 在 Maven 中编织依赖项不起作用
- javascript - 在 Array.prototype.reduce 中使用不纯的 reducer 是否安全?
- r - R:在数据框列表中查找特定元素并将其分配给 colname 并将元素切换到右侧