Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

176
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda