GNU/Linux >> Tutoriales Linux >  >> Linux

Establecer un entorno temporal ($PATH)

Puede crear un entorno individualizado para la invocación de un comando en particular:

VAR1=val1 VAR2=val2 VAR3=val3 make

Encuentro esto más limpio que hacer:

   export VAR1=val1
   export VAR2=val2
   export VAR3=val3
   make

a menos que esté en un script de contenedor y tal vez incluso entonces como con VAR1=val1 VAR2=val2 VAR3=val3 make el VAR las variables serán lo que fueran antes de la invocación make (incluidas, entre otras, las no exportadas y las inexistentes).

Las líneas largas no son un problema, siempre puedes dividirlas en varias líneas:

VAR1=val1\
VAR2=val2\
VAR3=val3\
make

Puede configurar variables de entorno como esta para cualquier comando de Unix. El shell lo configurará todo. Algunas aplicaciones (como make o rake ) modificará su entorno en función de argumentos que parecen definiciones de variables (consulte la respuesta de prodev_paris), pero eso depende de la aplicación.


Como todos sabemos, es preferible integrar herramientas estándar para una tarea como la creación de sus productos en lugar de crear su propio enfoque. El esfuerzo suele dar sus frutos a largo plazo.

Dicho esto, un enfoque simple sería definir diferentes archivos de entorno (por ejemplo, build-phone.env ) configuración del directorio de trabajo, PATH , CC etc. para sus diferentes productos y fuente de archivos de su entorno de forma interactiva bajo demanda:

. /path/to/build-phone.env
[your build commands]
. /path/to/build-watch.env
[your build commands]

¿Es mejor usar el entorno en lugar de archivos MAKE personalizados para establecer una configuración de compilación?

La mejor práctica para construir sistemas es no depender de ninguna variable de entorno. Para que nada más sea necesario para construir tu proyecto que:

git clone ... my_project
make -C my_project

Tener que establecer variables de entorno es propenso a errores y puede generar compilaciones inconsistentes.

¿Cómo ajustar correctamente las variables de entorno existentes?

Es posible que no necesite ajustarlos en absoluto. Al usar rutas completas a herramientas como compiladores, desenreda su sistema de compilación del entorno.


Cuando tengo varias variables para configurar, escribo un envoltorio script que luego uso como prefijo del comando que quiero modificar. Eso me permite usar el prefijo

  • aplicar a un solo comando, como make , o
  • inicializando un shell, para que los comandos subsiguientes usen la configuración alterada.

Uso envoltorios para

  • establecer las opciones del compilador (como clang , para establecer el CC variable, haciendo que los scripts de configuración "lo vean" como el compilador elegido),
  • estableciendo variables locales, para probar con POSIX C contra en_US contra en_US.UTF-8 , etc.
  • probar con entornos reducidos, como en cron .

Cada uno de los envoltorios hace lo necesario para identificar el PATH correcto , LD_LIBRARY_PATH y variables similares.

Por ejemplo, escribí este script ad hoc hace unos diez años para probarlo con una compilación local de python:

#!/bin/bash
ver=2.4.2
export TOP=/usr/local/python-$ver
export PATH=$TOP/bin:$PATH
export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $TOP/lib $TOP/lib/gcc/i686-pc-linux-gnu/$ver`
if test -d $TOP
then
    exec $*
else
    echo no $TOP
    exit 1
fi

y lo usé como with-python-2.4.2 miscript .

Algunos envoltorios simplemente llaman a otro script. Por ejemplo, uso este envoltorio alrededor del script de configuración para configurar variables para la compilación cruzada:

#!/bin/sh
# $Id: cfg-mingw,v 1.7 2014/09/20 20:49:31 tom Exp $
# configure to cross-compile using mingw32

BUILD_CC=${CC:-gcc}
unset CC
unset CXX

TARGET=`choose-mingw32`

if test -n "$TARGET"
then
    PREFIX=
    test -d /usr/$TARGET && PREFIX="--prefix=/usr/$TARGET"
    cfg-normal \
            --with-build-cc=$BUILD_CC \
            --host=$TARGET \
            --target=$TARGET \
            $PREFIX "[email protected]"
else
    echo "? cannot find MinGW compiler in path"
    exit 1
fi

donde choose-mingw32 y cfg-normal son scripts que (a) encuentran el nombre de destino disponible para el compilador cruzado y (b) brindan opciones adicionales al script de configuración.

Otros pueden sugerir shell alias o funciones . No los uso para este propósito porque mi shell de línea de comandos suele ser tcsh , mientras ejecuto estos comandos desde (a) otros scripts de shell, (b) editor de directorios o (c) editor de texto. Esos usan el shell POSIX (excepto, por supuesto, para scripts que requieren características específicas), haciendo que los alias o funciones sean de poca utilidad.


Linux
  1. Aprenda a configurar sus variables $PATH de forma permanente en Linux

  2. Variables de entorno de Linux:cómo leer y configurar en un VPS de Linux

  3. Cómo establecer, enumerar y eliminar variables de entorno en Linux

  4. Ejemplos de comandos de exportación de Linux (cómo establecer variables de entorno)

  5. ¿Cómo imprimir variables de entorno aparentemente ocultas?

Cómo establecer y enumerar variables de entorno en Linux

Cómo establecer y enumerar variables ambientales en Linux

Cómo configurar/desconfigurar variables de entorno en Linux

Cómo configurar y desactivar variables de entorno en Linux

¿Dónde se deben establecer las variables de entorno para Jenkins?

Variables de entorno de Linux