GNU/Linux >> Znalost Linux >  >> Linux

Nastavit dočasné prostředí ($PATH)

Můžete vytvořit individualizované prostředí pro vyvolání konkrétního příkazu:

VAR1=val1 VAR2=val2 VAR3=val3 make

Připadá mi to čistší než:

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

pokud nejste ve skriptu wrapper a možná i tehdy jako u VAR1=val1 VAR2=val2 VAR3=val3 make VAR proměnné budou stejné, jako byly před vyvoláním make (včetně, ale nejen neexportovaných a neexistujících).

Dlouhé řádky nejsou problém, vždy je můžete rozdělit na několik řádků:

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

Proměnné prostředí, jako je tato, můžete nastavit pro jakýkoli příkaz Unix. Shell to nastaví. Některé aplikace (například make nebo rake ) upraví své prostředí na základě argumentů, které vypadají jako definice proměnných (viz odpověď prodev_paris), ale to závisí na aplikaci.


Jak všichni víme, je vhodnější integrovat standardní nástroje pro úkol, jako je vytváření vašich produktů, namísto vytváření vlastního přístupu. Úsilí se obvykle dlouhodobě vyplatí.

Jak již bylo řečeno, jednoduchým přístupem by bylo definovat různé soubory prostředí (např. build-phone.env ) nastavení pracovního adresáře, PATH , CC atd. pro vaše různé produkty a interaktivně na vyžádání zdrojové soubory vašeho prostředí:

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

Je lepší použít k nastavení konfigurace sestavení prostředí místo vlastních makefiles?

Nejlepším postupem pro systémy sestavení je nezáviset na žádných proměnných prostředí. Takže k vybudování vašeho projektu není potřeba nic víc než:

git clone ... my_project
make -C my_project

Nutnost nastavit proměnné prostředí je náchylná k chybám a může vést k nekonzistentním sestavám.

Jak správně upravit existující proměnné prostředí?

Možná je nebudete muset upravovat vůbec. Použitím úplných cest k nástrojům, jako jsou kompilátory, oddělíte svůj systém sestavení od prostředí.


Když mám k nastavení několik proměnných, napíšu obal skript, který pak používám jako předponu příkazu, který chci upravit. To mi umožňuje použít předponu buď

  • použití na jeden příkaz, například make nebo
  • inicializace shellu, aby následující příkazy používaly změněná nastavení.

Používám obaly pro

  • nastavení možností kompilátoru (například clang , nastavte CC proměnná, takže konfigurační skripty ji „vidí“ jako vybraný kompilátor),
  • nastavení proměnných národního prostředí pro testování s POSIX C oproti en_US oproti en_US.UTF-8 atd.
  • testování v redukovaných prostředích, jako je cron .

Každý z obalů dělá to, co je potřeba k identifikaci správného PATH , LD_LIBRARY_PATH a podobné proměnné.

Například tento ad hoc skript jsem napsal asi před deseti lety, abych ho otestoval s místním sestavením pythonu:

#!/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

a použili jej jako with-python-2.4.2 myscript .

Některé obaly jednoduše volají jiný skript. Tento obal například používám kolem konfiguračního skriptu k nastavení proměnných pro křížovou kompilaci:

#!/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

kde choose-mingw32 a cfg-normal jsou skripty, které (a) najdou dostupný cílový název pro křížový kompilátor a (b) poskytují další možnosti konfiguračnímu skriptu.

Ostatní mohou navrhovat aliasy shellu nebo funkce . K tomuto účelu je nepoužívám, protože můj shell příkazového řádku je obvykle tcsh , zatímco tyto příkazy spouštím z (a) jiných shellových skriptů, (b) adresářového editoru nebo (c) textového editoru. Ty používají shell POSIX (samozřejmě kromě skriptů vyžadujících specifické vlastnosti), takže aliasy nebo funkce jsou málo použitelné.


Linux
  1. Naučte se, jak trvale nastavit proměnné $PATH v Linuxu

  2. Odkazování na proměnné prostředí *v* /etc/environment?

  3. Jak nastavit, vypsat a odebrat proměnné prostředí v Linuxu

  1. Kontrola proměnných prostředí

  2. Jak nastavit proměnné prostředí Linuxu pomocí Ansible

  3. Jak vytisknout zjevně skryté proměnné prostředí?

  1. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  2. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  3. Používání proměnných prostředí v souborech Tmux.conf?