GNU/Linux >> Znalost Linux >  >> Linux

Proč skript Bash nerozpozná aliasy?

V mém ~/.bashrc soubor obsahuje dvě definice:

  1. commandA , což je alias pro delší cestu
  2. commandB , což je alias skriptu Bash

Chci zpracovat stejný soubor pomocí těchto dvou příkazů, proto jsem napsal následující skript Bash:

#!/bin/bash

for file in "[email protected]"
    do
    commandA $file
    commandB $file
done

I po odhlášení z relace a opětovném přihlášení mě Bash vyzve command not found chyby pro oba příkazy při spuštění tohoto skriptu.

Co dělám špatně?

Přijatá odpověď:

Za prvé, jak řekl ddeimeke, aliasy ve výchozím nastavení nejsou rozbaleny v neinteraktivních shellech.

Za druhé, .bashrc není čtena neinteraktivními shelly, pokud nenastavíte BASH_ENV proměnná prostředí.

Ale hlavně:nedělejte to! Prosím? Jednoho dne ten skript přesunete někam, kde nejsou nastaveny potřebné aliasy, a zase se rozbije.

Místo toho nastavte a použijte proměnné jako zkratky ve skriptu:

#!/bin/bash

CMDA=/path/to/gizmo
CMDB=/path/to/huzzah.sh

for file in "[email protected]"
do
    $CMDA "$file"
    $CMDB "$file"
done

Linux
  1. Proč tento soubor neukáže ‚najít‘?

  2. Proč nefunguje ~/.bash_profile?

  3. Proč „sudo Su“ ve skriptu Shell nespustí zbytek skriptu jako kořen?

  1. The Bash ‘?

  2. Bash skript k odstranění nejstaršího souboru ze složky?

  3. Alternativa k „dd“, která soubor nezkrátí?

  1. Proč se skript Bash po spuštění neukončí?

  2. Proč nemohu použít CD ve skriptu Bash?

  3. Proč Ls -l neukazuje čas a rok pro každý soubor?