Proměnné prostředí

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Grafická úprava)
(Přidán odkaz na související stránky.)
 
(Není zobrazeno 23 mezilehlých verzí od 1 uživatele.)
Řádka 1: Řádka 1:
[[Category:VSE]]
+
[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Linux]][[Category:Příkazový řádek]]
[[Category:Informatika]]
+
[[Category:OSY]]
+
  
 
== Proměnné prostředí ==
 
== Proměnné prostředí ==
* Anglicky: environment variables
+
* Anglicky: ''environment variables''
*Vlastně se jedná o způsob komunikace mezi [[Proces | procesy]].
+
* Shell si můžeme představit jako interpret programovacího jazyka, tvořeného příkazy shellu. Pro vytváření programů (skriptů) pak často potřebujeme proměnné.
 +
* Vlastně se jedná o způsob [[Komunikace mezi procesy|komunikace mezi procesy]].
  
== Typické použití (příklad) ==
+
; Příklad použití
*LaTeX
+
* Při instalaci programu instalátor nastaví do trvalých proměnných cesty k adresáři s fonty.
**při instalaci nastaví do proměnných cesty ke svým adresářům
+
* Pokud adresář přesunu, stačí přenastavit hodnotu proměnné a program poběží bez problémů dál.
**pokud adresář přesunu, stačí přenastavit proměnnou
+
** může provést uživatel (z vlastních důvodů)
***buď já jako klient
+
** nebo autor programu, například v příští verzi, když zjistí, že by bylo jiné umístění lepší.
***nebo programátor, pokud se rozhodne v další verzi.
+
* Při spuštění program načte aktuální cestu z proměnné.
**při spuštění
+
* (Program ale musí být naprogramován tak, aby hledal cestu v proměnné prostředí.)
***program načte cestu z proměnné
+
***dále s nimi pracuje
+
  
== Kde se používají ==
+
; Kde se používají proměnné
 
*V shellu
 
*V shellu
 
**Jejich hodnoty nahrazuje shell
 
**Jejich hodnoty nahrazuje shell
Řádka 23: Řádka 20:
 
*Ve [[Skript | skriptech]]
 
*Ve [[Skript | skriptech]]
 
*V programech
 
*V programech
**Pro zajímavost: práce s proměnnými v Javě <../java/java.mm>
+
**Pro zajímavost: [http://download.oracle.com/javase/tutorial/essential/environment/env.html práce s proměnnými v Javě]
 +
 
 +
<div class="Priklad">
 +
;Příklady použití:
 +
# Typografický systém LaTeX používá proměnné pro uložení informací o umístění složek s fonty, spustitelnými soubory apod.
 +
# Pokud chceme spouštět balíčky .JAR v Javě, musíme mít k prostředí Javy nastavenu cestu (viz [[Java: Export balíčku JAR]]).
 +
</div>
 +
 
 +
== Proměnné shellu × proměnné prostředí ==
 +
*Anglicky: ''shell variables'' × ''environment variables''
 +
*Proměnné shellu platí pouze pro aktuální shell. (Spuštěné procesy je nezdědí.)
 +
*Proměnné prostředí zdědí od aktuálního procesu všechny dceřinné procesy.
 +
** Například příkazy spuštěné z shellu.
  
 
== Práce s proměnnými: bash ==
 
== Práce s proměnnými: bash ==
;nastavení
+
; Vytvoření proměnné/nastavení hodnoty proměnné
*promenna=hodnota
+
* proměná shellu
**vytvoří proměnnou shellu
+
promenna=hodnota
;výpis hodnoty
+
* Kopírování (export) proměnné shellu do prostředí:
*echo $PATH
+
export promenna
*nebo také
+
* Zkráceně lze psát naráz:
**printenv $PATH
+
export promenna=hodnota
;výpis všech proměnných
+
* Dočasné nastavení jen pro spouštěnou aplikaci
*set
+
    LANGUAGE=cs nano
;smazání proměnné
+
 
*~ nastavení prázdné hodnoty
+
;Výpis hodnoty proměnné
**promenna=
+
*proměnná shellu nebo prostředí
**ale nemusí pomoci vždy (např. proměnná POSIXLY_CORRECT)
+
echo $promenna
*unset $promenna
+
*proměnné prostředí
**odstraní proměnnou z prostředí
+
printenv promenna
*export -n LC_ALL
+
 
**ponechá proměnnou shellu s původní hodnotou
+
;Výpis všech proměnných
== Významné proměnné ==
+
* všechny proměnné (i shellu)
*http_proxy=http://172.16.1.1:3128
+
set
**Dříve: http_proxy=http://172.16.1.4:8080
+
* proměnné prostředí
 +
printenv
 +
 
 +
;Smazání proměnné
 +
* nastavení prázdné hodnoty
 +
** ale proměnná zůstane, byť s prázdnou hodnotou
 +
promenna=
 +
* uvolnění proměnné prostředí i shellu
 +
unset promenna
 +
* odstranění hodnoty z prostředí, ale ponechání aktuální hodnoty proměnné shellu
 +
export -n promenna
 +
 
 +
== Významné proměnné Unixu/Linuxu ==
 +
Dále uvádíme proměnné, které jsou v unixových systémech často nastaveny.
 +
<div class="Poznamka">V&nbsp;závislosti na konkrétním nastavení počítače a zvolené distribuci ale některé z těchto proměnných nemusí být nastaveny.</div>
 +
*http_proxy
 +
    http_proxy=ht<tt></tt>tp://172.16.1.1:3128
 
*PATH
 
*PATH
 
**složky, odkud se mohou spouštět soubory,
 
**složky, odkud se mohou spouštět soubory,
**oddělené dvojtečkou (na Windows středníkem)
+
**cesty ke složkám jsou oddělené dvojtečkou.
 +
<div class="Poznamka">Proměnná PATH funguje i ve Windows, jen jsou cesty oddělené středníkem.</div>
 
*USER
 
*USER
**už tedy víte, proč echo $USER vypíše aktivního uživatele.
+
    echo $USER
 
*SHELL
 
*SHELL
 
*HOME
 
*HOME
Řádka 57: Řádka 83:
 
**aktuální cesta
 
**aktuální cesta
 
*EDITOR
 
*EDITOR
**EDITOR=nano
+
    EDITOR=nano
 +
*LANGUAGE
 +
** nastavení jazyka (<tt>cs_CZ</tt>, <tt>en_US</tt>)
 +
    LANGUAGE=en_US nano
 +
    LANGUAGE=cs_CZ nano
 
*LANG
 
*LANG
**en_US.UTF-8
+
** nastavení národního prostředí (<tt>cs_CZ.UTF-8</tt>, <tt>en_US.UTF-8</tt>)
 
+
    LANG=en_US.UTF-8 nano
== Proměnné shellu × proměnné prostředí ==
+
*shell variables × environment variables
+
*Proměnné shellu platí pouze pro aktuální shell. (Nedědí se.)
+
*Prostředí (všechny proměnné prostředí) dědí od aktuálního procesu všechny dceřinné procesy.
+
*Pokud chceme nastavit platnost proměnné do všech procesů, použijeme:
+
*export promenna
+
**kopie proměnné shellu do prostředí
+
**zkráceně lze:
+
***export $http_proxy=h...
+
  
 
== Nastavení hodnoty trvale ==
 
== Nastavení hodnoty trvale ==
*Windows XP
+
=== Windows ===
**Tento počítač-> Vlastnosti-> Upřesnit-> Proměnné prostředí
+
* Tento počítač-> Vlastnosti-> Upřesnit-> Proměnné prostředí
**Uživatelské proměnné
+
* Uživatelské proměnné
**Globální proměnné
+
* Globální proměnné
*Ubuntu
+
 
**pro daného uživatele
+
=== GNU/Linux (shell <tt>bash</tt>) ===
***~/.profile
+
* Vyzkoušeno v distribuci Debian.
****změny se projeví až po restartu?
+
* Při startu systému/shellu se spouští konfigurační skripty, kde lze nastavit proměnné.
***~/.bash_profile or ~./bash_login
+
* Obecně každý shell může spouštět jiné konfigurační skripty.
****pokud existují, bash je použije místo ~/.profile
+
; Pro daného uživatele
***~/.bashrc
+
* <tt>~/.profile</tt>
****specifické pro Ubuntu?
+
** Spouští se při spuštění ''login shell-u'', tedy se načítá po přihlášení uživatele.
****změny ihned při příštím spuštění bash-e
+
** Pro zajímavost: v tomto skriptu se nastavuje hodnota proměnné <tt>PATH</tt> (Debian 6).
**pro všechny uživatele
+
* Další možnosti: <tt>~/.bash_profile</tt>, <tt>~./bash_login</tt>
***/etc/profile
+
** pokud existují, <tt>bash</tt> je použije místo <tt>~/.profile</tt>
***/etc/bash.bashrc
+
* <tt>~/.bashrc</tt>
****specifické pro Ubuntu?
+
** Spouští se v ''non-login shellu'', tedy pokud jsem již přihlášen a spouštím další shell (například z grafického prostředí, nebo příkazem <code>bash</code>)
***/etc/environment
+
; Pro všechny uživatele  
****není to skript, jen přiřazení proměnných
+
* <tt>/etc/profile</tt>
 +
* <tt>/etc/bash.bashrc</tt>
 +
** Specifické pro Ubuntu?
 +
* <tt>/etc/environment</tt>
 +
**není to skript, jen přiřazení proměnných
 +
 
 +
Více viz také: [https://wiki.debian.org/EnvironmentVariables Wiki.Debian.org &gt; EnvironmentVariables].
 +
 
 +
== Příklady ==
 +
; Příklad &mdash; tvorba a spouštění skriptu
 +
* Připravte složku s názvem <tt>binary</tt> ve své domovské složce.
 +
* Připravte v ní skript (vytvořte textový soubor) s názvem <tt>pozdrav</tt>.
 +
* V rámci skriptu vypište něco na obrazovku. (Příkazy, které se mají v rámci spuštění skriptu provést zapište do textového souboru <tt>pozdrav</tt>):
 +
echo "Ahoj"
 +
* Nastavte skriptu oprávnění pro spuštění:
 +
chmod 764 pozdrav
 +
* Skript nyní nejde spustit zapsáním jména skriptu, je třeba uvést cestu
 +
''$'' pozdrav
 +
''-bash: pozdrav: příkaz nenalezen''
 +
''$'' ./pozdrav
 +
''Ahoj''
 +
* Přidejte složku <tt>binary</tt> do proměnné <tt>$PATH</tt>.
 +
* Vyzkoušejte, že skript již lze spustit tak, že napíšete pouze název.
 +
 
 +
<div class="Poznamka">Poznámka:<br />
 +
Pokud v Ubuntu existuje složka <tt>bin</tt> ve Vaší domovské složce, automaticky se přidá do proměnné <tt>PATH</tt>.
 +
Tato akce se provede ve skriptu <tt>/.profile</tt>.
 +
</div>
  
 
== Úkoly ==
 
== Úkoly ==
*Vypište všechny proměnné
+
; Jednoduché úkoly:
*Vypište hodnotu proměnné $PATH.
+
# Vypište všechny proměnné
**echo $PATH
+
# Vypište hodnotu proměnné <tt>PATH</tt>.
**set | grep PATH
+
# Nastavte proměnnou <tt>MyBinDir</tt> na hodnotu <tt>~/bin</tt>
*Nastavte proměnnou $MyBinDir na hodnotu ~/bin
+
#Přidejte cestu <tt>~/bin</tt> do proměnné <tt>PATH</tt>. Ověřte, že proběhlo správně.
*Přidejte cestu do proměnné $PATH
+
# Kdybyste smazali proměnnou <tt>PATH</tt>. Půjdou spustit příkazy??? Jak to vyřešíte? Vyzkoušejte!
**~/bin
+
**PATH=$PATH:$HOME/bin
+
**znovu vypsat proměnnou $PATH
+
*Zkuste smazat proměnnou $PATH
+
**půjdou spustit příkazy???
+
**Jak to vyřešíte?
+
*PR* Přidání adresáře do cesty
+
*Poznámka:
+
**tato akce se provádí na Ubuntu automaticky v /.profile pro $HOME/bin, pokud složka $HOME/bin existuje
+
*Připravte složku
+
**$HOME/binary
+
*Připravte v ní skript
+
**skript v něm, který něco vypíše na obrazovku
+
**pozdrav
+
***echo "Ahoj!"
+
**Nutné
+
***chmod 764 pozdrav
+
*skript nejde spustit zapsáním pouze jména, je třeba uvést cestu
+
**například ./pozdrav
+
*po nastavení složky do proměnné $PATH vyzkoušejte, že skript funguje
+
**zkusit, že skript funguje
+
  
== Příklad: login skript ==
+
 
*Zařidte, aby byla kdykoli po spuštění shellu dostupná proměnná $LOGIN_TIME, ve které bude uložen čas přihlášení.
+
; Úkol &mdash; login skript
*Použijte příkaz date
+
*Zařidte, aby byla kdykoli po spuštění shellu dostupná proměnná <tt>LOGIN_TIME</tt>, ve které bude uložen čas přihlášení.
*Vytvořte soubor .logintimes, ve kterém budou data spuštění bash-e pro každé přihlášení.
+
*Použijte příkaz <code>date</code>
 +
*Vytvořte soubor <tt>.logintimes</tt>, ve kterém budou data spuštění Bash-e pro každé přihlášení.
 
**Jak často se do souboru bude psát?
 
**Jak často se do souboru bude psát?
  
== Vyhodnocování příkazové řádky ==
+
 
*Pořadí
+
<div class="Reseni">
**nahrazení proměnných
+
Řešení úkolů (Linux):
**nahrazení *, ?
+
# <code>set</code>
**v uvozovnách se nenahrazuje
+
# <code>echo $PATH</code> nebo <code>set | grep ^PATH=</code>
 +
# <code>MyBinDir=~/bin</code>
 +
# <code>PATH=$PATH:$HOME/bin</code><br /><code>echo $PATH</code>
 +
# <code>PATH=</code>
 +
</div>
 +
 
 +
== Související stránky ==
 +
* [[Vyhodnocení příkazů]]
  
 
== Zdroje ==
 
== Zdroje ==
*[https://help.ubuntu.com/community/EnvironmentVariables Ubuntu.com/Environment Variables]
+
*[https://help.ubuntu.com/community/EnvironmentVariables Ubuntu.com -> Environment Variables]
 +
*[http://wiki.ubuntu.cz/V%C3%ADcejazy%C4%8Dn%C3%BD%20syst%C3%A9m Wiki.Ubuntu.cz -> Vícejazyčný systém]

Aktuální verze z 12. 1. 2023, 00:35


Obsah

Proměnné prostředí

Příklad použití
Kde se používají proměnné
Příklady použití
  1. Typografický systém LaTeX používá proměnné pro uložení informací o umístění složek s fonty, spustitelnými soubory apod.
  2. Pokud chceme spouštět balíčky .JAR v Javě, musíme mít k prostředí Javy nastavenu cestu (viz Java: Export balíčku JAR).

Proměnné shellu × proměnné prostředí

Práce s proměnnými: bash

Vytvoření proměnné/nastavení hodnoty proměnné
promenna=hodnota
export promenna
export promenna=hodnota
   LANGUAGE=cs nano
Výpis hodnoty proměnné
echo $promenna
printenv promenna
Výpis všech proměnných
set
printenv
Smazání proměnné
promenna=
unset promenna
export -n promenna

Významné proměnné Unixu/Linuxu

Dále uvádíme proměnné, které jsou v unixových systémech často nastaveny.

V závislosti na konkrétním nastavení počítače a zvolené distribuci ale některé z těchto proměnných nemusí být nastaveny.
   http_proxy=http://172.16.1.1:3128
Proměnná PATH funguje i ve Windows, jen jsou cesty oddělené středníkem.
   echo $USER
   EDITOR=nano
   LANGUAGE=en_US nano
   LANGUAGE=cs_CZ nano
   LANG=en_US.UTF-8 nano

Nastavení hodnoty trvale

Windows

GNU/Linux (shell bash)

Pro daného uživatele
Pro všechny uživatele

Více viz také: Wiki.Debian.org > EnvironmentVariables.

Příklady

Příklad — tvorba a spouštění skriptu
echo "Ahoj"
chmod 764 pozdrav
$ pozdrav
-bash: pozdrav: příkaz nenalezen
$ ./pozdrav
Ahoj
Poznámka:

Pokud v Ubuntu existuje složka bin ve Vaší domovské složce, automaticky se přidá do proměnné PATH. Tato akce se provede ve skriptu /.profile.

Úkoly

Jednoduché úkoly
  1. Vypište všechny proměnné
  2. Vypište hodnotu proměnné PATH.
  3. Nastavte proměnnou MyBinDir na hodnotu ~/bin
  4. Přidejte cestu ~/bin do proměnné PATH. Ověřte, že proběhlo správně.
  5. Kdybyste smazali proměnnou PATH. Půjdou spustit příkazy??? Jak to vyřešíte? Vyzkoušejte!


Úkol — login skript


Řešení úkolů (Linux):

  1. set
  2. echo $PATH nebo set | grep ^PATH=
  3. MyBinDir=~/bin
  4. PATH=$PATH:$HOME/bin
    echo $PATH
  5. PATH=

Související stránky

Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje