No puedo acceder a las variables ambientales en ~ / .bashrc o ~ / .profile de Scala. ¿Cómo accedo a las variables ambientales desde un proceso Scala? Además, no puedo actualizar las rutas de esta manera:

Process("myProgram", None, "PATH"-> ".:/path/to/myProgram").!!

Sin embargo, esto funciona:

Process("/path/to/myProgram",None).!!

Funciona bien. Sin embargo, cuando myProgram depende de que se establezcan algunas variables ambientales, esto ya no funciona.

  1. ¿Cómo cambio la variable PATH de un programa Scala?
  2. Y aún mejor, ¿cómo puedo hacer que Scala acceda a las variables ambientales desde .bashrc o .profile? Actualmente ninguno de esos está disponible.

Gracias por tu tiempo y ayuda

1
hamsterman 12 mar. 2021 a las 20:59

1 respuesta

La mejor respuesta

¿Cómo accedo a las variables ambientales desde un proceso Scala?

El util.Properties objeto ofrece 3 métodos diferentes para inspeccionar las variables ambientales que el proceso / programa de Scala ha heredado. He aquí un ejemplo:

util.Properties.envOrNone("LC_COLLATE")
//res0: Option[String] = Some(POSIX)

¿Cómo cambio la variable PATH de un programa Scala?

Un proceso en ejecución no puede alterar su propio entorno, pero puede iniciar un nuevo proceso con un entorno modificado. Hay un par de formas diferentes de hacerlo.

Una es lanzar el shell de su elección y usar la sintaxis del shell para realizar las modificaciones antes de invocar el comando de destino.

import sys.process._
Seq("sh", "-c", "PATH=$PATH:$HOME/Progs myProg").!!
// a single arg:^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

O puede proporcionar las modificaciones del entorno como argumento para uno de los muchos métodos Process.apply() sobrecargados.

import scala.sys.process._
Process("./myProg"
       ,new java.io.File("/full/path/to")
       ,"PATH"->s"${Properties.envOrElse("PATH",".")}:/full/path/to"
       ).!!

... ¿puedo hacer que Scala acceda a las variables ambientales desde .bashrc o .profile?

Si su programa Scala se inicia desde un shell con el entorno adecuado, todos los procesos iniciados desde su programa deberían heredar lo mismo. Si, por alguna razón, su programa no ha heredado un entorno completamente equipado, lo más fácil es lanzar un shell completamente equipado para ejecutar el comando de destino.

import scala.sys.process._
Seq("sh", "-c" , ". $HOME/.bashrc && myProg").!!
1
jwvh 14 mar. 2021 a las 23:37