Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
La mejor manera de establecer variables de entorno en el shell de llamadas

Estoy escribiendo una utilidad que necesita poder configurar y usar el contexto. Me gustaría que use variables de entorno en el shell para que pueda recordar en qué contexto se encuentra actualmente entre invocaciones. Idealmente, me gustaría configurar esta variable de entorno desde la propia utilidad. Algo como:

 mytool set-context <context> mytool do-stuff # Aware of <context>

Me gustaría que esto se comporte como:

 export MYTOOL_CONTEXT=<context> mytool do-stuff # Aware of <context>

Ahora, en realidad no es posible que un programa establezca variables de entorno en el entorno del shell de llamada (cubierto en SO aquí ). Sin embargo, ese es el tipo de comportamiento que quiero y estoy buscando una aproximación o una solución alternativa.

Algunas ideas que tenía en mente:

  • Envíe la cadena adecuada y espere que el usuario establezca la variable (suponiendo que la variable no se establezca simplemente en <context> , sino en alguna cadena derivada de ella). Eso se vería como export MYTOOL_CONTEXT=$(mytool get-context-var <context>) .
  • Envíe el comando completo para configurarlo. Se vería algo así como $(mytool set-context <context>) , donde la salida del comando se ejecuta realmente (y la salida sería algo así como export MYTOOL_CONTEXT=<context> ).
  • Guárdelo en un archivo temporal cuyo nombre se base en el PID del shell. Esto funcionaría en la mayoría de los casos, pero la eliminación del archivo no ocurriría automáticamente, por lo que probablemente permanecería hasta que se reiniciara (es decir, posiblemente para siempre en muchas máquinas).

¿Alguna otra idea? ¡Gracias!

Nota : los ejemplos anteriores usan la sintaxis BASH, pero hay equivalentes en la mayoría de los shells.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Antes de la aclaración

Los shells POSIX ( bash , ksh , etc.) y el shell Bourne le permiten establecer variables de entorno en una línea de comandos para un solo comando:

 MYTOOL_CONTEXT=<context> mytool do-stuff

Esto establece MYTOOL_CONTEXT como una variable de entorno para esa invocación de mytool (solo). Por cierto, la mayoría de los shells aceptan una opción -k (que no está estandarizada por POSIX) que significa que todos los argumentos que parecen VAR=valor se tratan como variables de entorno, incluso cuando aparecen después del nombre del comando. Esta es una curiosidad con un valor práctico bastante limitado, por lo que no está estandarizada.

El comando POSIXenv está diseñado para permitirle controlar el entorno de un comando invocado, aunque se usa comúnmente sin ningún argumento para enumerar el entorno actual. Entonces, alternativamente, podrías usar:

 env MYTOOL_CONTEXT=<context> mytool do-stuff

La ventaja de env es que puede hacer cosas como desactivar todas las variables de entorno antes de configurar las especificadas en la línea de comando (para que tenga un control total sobre el entorno).

Después de la aclaración

Si la intención es configurar el entorno para su uso posterior, entonces el archivo . comando es el que se debe usar. Puede crear un archivo, context , que contiene los comandos que se ejecutarán para configurar el entorno. Entonces puedes usar:

 . context

y el contenido del archivo se ejecutará en el contexto del shell actual, por lo que puede establecer variables de entorno, etc. Bash proporciona un sinónimo, source , para . dominio. Se inspiró en el shell C que no proporciona el . comando pero proporciona la source como un equivalente. El archivo nombrado como argumento del . El comando se buscará en $PATH pero no es necesario que sea ejecutable (legible es suficiente). Si proporciona argumentos adicionales, se convierten en los parámetros posicionales ( $1 , etc.) durante la duración del . dominio. Tenga en cuenta también que las variables o funciones creadas por el archivo punteado permanecen vigentes cuando finaliza el archivo (a diferencia de las variables en una secuencia de comandos normal que desaparecen cuando se completa la secuencia de comandos). Si no va a contaminar el espacio de nombres del usuario, debe tener cuidado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!