Proměnné prostředí

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Vyhodnocování příkazové řádky: Doplněno, že jednou nahrazené hodnoty se dále neupravují.)
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é.)
Řádka 228: Řádka 228:
 
</div>
 
</div>
  
<div class="Varovani">
+
<div class="Poznamka">
'''V&nbsp;žádném případě nedoporučujeme používat v&nbsp;názvech souborů speciální znaky!'''  
+
'''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.
 
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.

Verze z 12. 1. 2023, 00:23


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=

Vyhodnocování příkazové řádky

Pokud například zapíšeme v příkazovém řádku:

mv *.txt ~/$TARGET

Shell provede následující nahrazení:

  1. ~ nahradí za domovský adresář
  2. $TARGET nahradí za obsah proměnné
  3. *.txt nahradí za seznam všech souborů v adresáři s příponou .txt.

Pokud příkaz spustí uživatel student, obsahem proměnné TARGET je text backup a v aktuálním adresáři mají příponu .txt jen soubory a.txt a b.txt, spustí se příkaz:

mv a.txt b.txt /home/student/backup

Ve Windows metaznaky dostávají příkazy bez nahrazování. Proto lze na Windows psát:

ren *.jpg *.bkp.jpg

V Linuxu bychom toto museli řešit s využitím cyklu.

Pořadí nahrazování
  1. ~
  2. nahrazení proměnných
  3. nahrazení *, ?

Jednou nahrazené hodnoty již dalším nahrazováním neprochází, i když obsahují speciální znaky

Příklady:

FILES="*.txt"
ls $FILES

→ vypíše: ls: nelze přistoupit k '*.txt'

A ze stejného důvodu:

touch '$POKUS'
echo *POK*

→ vypíše: $POKUS (Nedosadí se hodnota proměnné POKUS.)


A také:

TARGET="~/BACKUP"
cp data.txt $TARGET

→ vypíše chybu a nebude fungovat, protože se bude snažit zapisovat do složky ~/BACKUP (vlnovka a lomítko budou součástí názvu) Přitom ale:

TARGET=~/BACKUP
cp data.txt $TARGET

→ fungovat bude (pokud existuje složka BACKUP ve vaší domovské složce)

Vložení speciálních znaků do příkazů
  • student@computer:~$ touch \$USER → Vytvoří soubor s názvem $USER
  • student@computer:~$ touch a\ b → Vytvoří soubor s názvem a b (v názvu je mezera)
  • student@computer:~$ touch a\\b → Vytvoří soubor s názvem a\b
  • student@computer:~$ echo ~/$USER → /home/student/student
  • student@computer:~$ echo "~/$USER" → ~/student
  • student@computer:~$ echo '~/$USER' → ~/$USER

Obecně nedoporučujeme používat v názvech souborů speciální znaky!

Může se ale stát, že takový soubor vznikne například přenosem z jiného operačního systému, kde dané znaky nejsou speciálními znaky.

Zdroje

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