Proměnné prostředí
Z MiS
(Rozdíly mezi verzemi)
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 | + | * 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]]. | ||
− | + | ; Příklad použití | |
− | * | + | * Při instalaci programu instalátor nastaví do trvalých proměnných cesty k adresáři s fonty. |
− | + | * Pokud adresář přesunu, stačí přenastavit hodnotu proměnné a program poběží bez problémů dál. | |
− | * | + | ** může provést uživatel (z vlastních důvodů) |
− | ** | + | ** nebo autor programu, například v příští verzi, když zjistí, že by bylo jiné umístění lepší. |
− | + | * Při spuštění program načte aktuální cestu z proměnné. | |
− | * | + | * (Program ale musí být naprogramován tak, aby hledal cestu v proměnné prostředí.) |
− | + | ||
− | * | + | |
− | + | ; 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ě <.. | + | **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 |
− | * | + | promenna=hodnota |
− | ; | + | * Kopírování (export) proměnné shellu do prostředí: |
− | *echo $ | + | export promenna |
− | * | + | * Zkráceně lze psát naráz: |
− | + | export promenna=hodnota | |
− | ; | + | * Dočasné nastavení jen pro spouštěnou aplikaci |
− | *set | + | LANGUAGE=cs nano |
− | ; | + | |
− | * | + | ;Výpis hodnoty proměnné |
− | **promenna= | + | *proměnná shellu nebo prostředí |
− | * | + | echo $promenna |
− | + | *proměnné prostředí | |
− | * | + | printenv promenna |
− | + | ||
− | + | ;Výpis všech proměnných | |
− | == Významné proměnné == | + | * všechny proměnné (i shellu) |
− | + | set | |
− | * | + | * 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 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 | + | **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 | ||
− | + | echo $USER | |
*SHELL | *SHELL | ||
*HOME | *HOME | ||
Řádka 57: | Řádka 83: | ||
**aktuální cesta | **aktuální cesta | ||
*EDITOR | *EDITOR | ||
− | ** | + | 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 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
== Nastavení hodnoty trvale == | == Nastavení hodnoty trvale == | ||
− | + | === Windows === | |
− | + | * Tento počítač-> Vlastnosti-> Upřesnit-> Proměnné prostředí | |
− | + | * Uživatelské proměnné | |
− | + | * Globální proměnné | |
− | * | + | |
− | ** | + | === GNU/Linux (shell <tt>bash</tt>) === |
− | * | + | * Vyzkoušeno v distribuci Debian. |
− | ** | + | * Při startu systému/shellu se spouští konfigurační skripty, kde lze nastavit proměnné. |
− | ***~/.bash_profile | + | * Obecně každý shell může spouštět jiné konfigurační skripty. |
− | + | ; Pro daného uživatele | |
− | * | + | * <tt>~/.profile</tt> |
− | ** | + | ** Spouští se při spuštění ''login shell-u'', tedy se načítá po přihlášení uživatele. |
− | + | ** Pro zajímavost: v tomto skriptu se nastavuje hodnota proměnné <tt>PATH</tt> (Debian 6). | |
− | + | * Další možnosti: <tt>~/.bash_profile</tt>, <tt>~./bash_login</tt> | |
− | * | + | ** pokud existují, <tt>bash</tt> je použije místo <tt>~/.profile</tt> |
− | * | + | * <tt>~/.bashrc</tt> |
− | ** | + | ** 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>) |
− | * | + | ; Pro všechny uživatele |
− | + | * <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 > EnvironmentVariables]. | ||
+ | |||
+ | == Příklady == | ||
+ | ; Příklad — 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 == | ||
− | + | ; Jednoduché úkoly: | |
− | + | # Vypište všechny proměnné | |
− | + | # Vypište hodnotu proměnné <tt>PATH</tt>. | |
− | + | # Nastavte proměnnou <tt>MyBinDir</tt> na hodnotu <tt>~/bin</tt> | |
− | + | #Přidejte cestu <tt>~/bin</tt> do proměnné <tt>PATH</tt>. Ověřte, že proběhlo správně. | |
− | + | # Kdybyste smazali proměnnou <tt>PATH</tt>. Půjdou spustit příkazy??? Jak to vyřešíte? Vyzkoušejte! | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | *Zařidte, aby byla kdykoli po spuštění shellu dostupná proměnná | + | ; Úkol — 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í | + | *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? | ||
− | == | + | |
− | + | <div class="Reseni"> | |
− | + | Řešení úkolů (Linux): | |
− | + | # <code>set</code> | |
− | * | + | # <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 | + | *[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í
- Anglicky: environment variables
- 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.
- Příklad použití
- Při instalaci programu instalátor nastaví do trvalých proměnných cesty k adresáři s fonty.
- Pokud adresář přesunu, stačí přenastavit hodnotu proměnné a program poběží bez problémů dál.
- může provést uživatel (z vlastních důvodů)
- nebo autor programu, například v příští verzi, když zjistí, že by bylo jiné umístění lepší.
- Při spuštění program načte aktuální cestu z proměnné.
- (Program ale musí být naprogramován tak, aby hledal cestu v proměnné prostředí.)
- Kde se používají proměnné
- V shellu
- Jejich hodnoty nahrazuje shell
- pokud se na řádku objeví $promenna, dosadí hodnotu proměnné promenna
- Ve skriptech
- V programech
- Pro zajímavost: práce s proměnnými v Javě
- 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).
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
- Vytvoření proměnné/nastavení hodnoty proměnné
- proměná shellu
promenna=hodnota
- Kopírování (export) proměnné shellu do prostředí:
export promenna
- Zkráceně lze psát naráz:
export promenna=hodnota
- Dočasné nastavení jen pro spouštěnou aplikaci
LANGUAGE=cs nano
- Výpis hodnoty proměnné
- proměnná shellu nebo prostředí
echo $promenna
- proměnné prostředí
printenv promenna
- Výpis všech proměnných
- všechny proměnné (i shellu)
set
- 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.
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_proxy=http://172.16.1.1:3128
- PATH
- složky, odkud se mohou spouštět soubory,
- cesty ke složkám jsou oddělené dvojtečkou.
Proměnná PATH funguje i ve Windows, jen jsou cesty oddělené středníkem.
- USER
echo $USER
- SHELL
- HOME
- domovský adresář aktuálního uživatele
- PWD
- aktuální cesta
- EDITOR
EDITOR=nano
- LANGUAGE
- nastavení jazyka (cs_CZ, en_US)
LANGUAGE=en_US nano LANGUAGE=cs_CZ nano
- LANG
- nastavení národního prostředí (cs_CZ.UTF-8, en_US.UTF-8)
LANG=en_US.UTF-8 nano
Nastavení hodnoty trvale
Windows
- Tento počítač-> Vlastnosti-> Upřesnit-> Proměnné prostředí
- Uživatelské proměnné
- Globální proměnné
GNU/Linux (shell bash)
- Vyzkoušeno v distribuci Debian.
- Při startu systému/shellu se spouští konfigurační skripty, kde lze nastavit proměnné.
- Obecně každý shell může spouštět jiné konfigurační skripty.
- Pro daného uživatele
- ~/.profile
- Spouští se při spuštění login shell-u, tedy se načítá po přihlášení uživatele.
- Pro zajímavost: v tomto skriptu se nastavuje hodnota proměnné PATH (Debian 6).
- Další možnosti: ~/.bash_profile, ~./bash_login
- pokud existují, bash je použije místo ~/.profile
- ~/.bashrc
- 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
bash
)
- 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
- Pro všechny uživatele
- /etc/profile
- /etc/bash.bashrc
- Specifické pro Ubuntu?
- /etc/environment
- není to skript, jen přiřazení proměnných
Více viz také: Wiki.Debian.org > EnvironmentVariables.
Příklady
- Příklad — tvorba a spouštění skriptu
- Připravte složku s názvem binary ve své domovské složce.
- Připravte v ní skript (vytvořte textový soubor) s názvem pozdrav.
- 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 pozdrav):
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 binary do proměnné $PATH.
- Vyzkoušejte, že skript již lze spustit tak, že napíšete pouze název.
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
- Vypište všechny proměnné
- Vypište hodnotu proměnné PATH.
- Nastavte proměnnou MyBinDir na hodnotu ~/bin
- Přidejte cestu ~/bin do proměnné PATH. Ověřte, že proběhlo správně.
- Kdybyste smazali proměnnou PATH. Půjdou spustit příkazy??? Jak to vyřešíte? Vyzkoušejte!
- Úkol — 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í.
- Použijte příkaz
date
- Vytvořte soubor .logintimes, ve kterém budou data spuštění Bash-e pro každé přihlášení.
- Jak často se do souboru bude psát?
Řešení úkolů (Linux):
-
set
-
echo $PATH
neboset | grep ^PATH=
-
MyBinDir=~/bin
-
PATH=$PATH:$HOME/bin
echo $PATH
-
PATH=