Proměnné prostředí

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Vyhodnocování příkazové řádky: Doporučení nepoužívat speciální znaky v názvu: varování nahrazeno jen poznámkou. Není to kritické.)
(Přidán odkaz na související stránky.)
 
(Není zobrazena 1 mezilehlá verze od 1 uživatele.)
Řádka 165: Řádka 165:
 
</div>
 
</div>
  
== Vyhodnocování příkazové řádky ==
+
== Související stránky ==
* Proměnné a další speciální znaky v&nbsp;Linuxu nahrazuje shell. Příkazy tedy tyto znaky vůbec nedostanou.
+
* [[Vyhodnocení příkazů]]
 
+
<div class="Priklad">
+
Pokud například zapíšeme v&nbsp;příkazovém řádku:
+
mv *.txt ~/$TARGET
+
Shell provede následující nahrazení:
+
# <code>~</code> nahradí za domovský adresář
+
# <code>$TARGET</code> nahradí za obsah proměnné
+
# <code>*.txt</code> nahradí za seznam všech souborů v&nbsp;adresáři s&nbsp;příponou .txt.
+
Pokud příkaz spustí uživatel <code>student</code>, obsahem proměnné <code>TARGET</code> je text <code>backup</code> a v&nbsp;aktuálním adresáři mají příponu .txt jen soubory <code>a.txt</code> a <code>b.txt</code>, spustí se příkaz:
+
mv a.txt b.txt /home/student/backup
+
</div>
+
 
+
<div class="Poznamka">
+
Ve Windows metaznaky dostávají příkazy bez nahrazování. Proto lze na Windows psát:
+
ren *.jpg *.bkp.jpg
+
V&nbsp;Linuxu bychom toto museli řešit s&nbsp;využitím cyklu.
+
</div>
+
 
+
; Pořadí nahrazování
+
# ~
+
# nahrazení proměnných
+
# nahrazení *, ?
+
 
+
Jednou nahrazené hodnoty již dalším nahrazováním neprochází, i když obsahují speciální znaky
+
<div class="Priklad">
+
Příklady:
+
FILES="*.txt"
+
ls $FILES
+
&rarr; vypíše: <code>ls: nelze přistoupit k '*.txt'</code>
+
 
+
A ze stejného důvodu:
+
touch '$POKUS'
+
echo *POK*
+
&rarr; vypíše: <code>$POKUS</code> (Nedosadí se hodnota proměnné POKUS.)
+
 
+
 
+
A také:
+
TARGET="~/BACKUP"
+
cp data.txt $TARGET
+
&rarr; vypíše chybu a nebude fungovat, protože se bude snažit zapisovat do složky <code>~/BACKUP</code> (vlnovka a lomítko budou součástí názvu)
+
Přitom ale:
+
TARGET=~/BACKUP
+
cp data.txt $TARGET
+
&rarr; fungovat bude (pokud existuje složka <code>BACKUP</code> ve vaší domovské složce)
+
</div>
+
 
+
; Vložení speciálních znaků do příkazů
+
* Pokud chceme do textu vložit speciální znaky, můžeme použít zpětné lomítko, uvozovky nebo apostrofy (<code>\</code>, <code>"</code> nebo <code>'</code>).
+
* Zpětné lomítko <code>\</code>: ruší speciální význam dalšího znaku.
+
* Uvozovky <code>"</code>: blokují význam speciálních znaků, ale doplňují se hodnoty proměnných.
+
* Apostrofy <code>'</code>: blokují význam všech speciálních znaků včetně <code>$</code>.
+
 
+
<div class="Priklad">
+
* <code>student@computer:~$ touch \$USER</code> &rarr; Vytvoří soubor s&nbsp;názvem <code>$USER</code>
+
* <code>student@computer:~$ touch a\ b</code> &rarr; Vytvoří soubor s&nbsp;názvem <code>a b</code> (v&nbsp;názvu je mezera)
+
* <code>student@computer:~$ touch a\\b</code> &rarr; Vytvoří soubor s&nbsp;názvem <code>a\b</code>
+
* <code>student@computer:~$ echo ~/$USER</code> &rarr; /home/student/student
+
* <code>student@computer:~$ echo "~/$USER"</code> &rarr; ~/student
+
* <code>student@computer:~$ echo '~/$USER'</code> &rarr; ~/$USER
+
</div>
+
 
+
<div class="Poznamka">
+
'''Obecně nedoporučujeme používat v&nbsp;názvech souborů speciální znaky!'''
+
 
+
Může se ale stát, že takový soubor vznikne například přenosem z&nbsp;jiného operačního systému, kde dané znaky nejsou speciálními znaky.
+
</div>
+
  
 
== 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]
 
*[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