GNU/Linux >> Znalost Linux >  >> Linux

V Bash, kdy alias, kdy skript a kdy napsat funkci?

Položit tuto otázku mi trvalo téměř 10 let používání Linuxu. Všechno to byly pokusy a omyly a náhodné noční surfování po internetu.

Ale na to by lidé neměli potřebovat 10 let. Pokud bych s Linuxem teprve začínal, chtěl bych vědět:Kdy použít alias, kdy skript a kdy napsat funkci?

Pokud jde o aliasy, používám aliasy pro velmi jednoduché operace, které neberou argumenty.

alias houston='cd /home/username/.scripts/'

To se zdá být zřejmé. Ale někteří lidé to dělají:

alias command="bash bashscriptname"

(a přidejte jej do .bashrc soubor)

Je k tomu dobrý důvod? Opravdu se snažím, ale opravdu mě nenapadají žádné okolnosti, za kterých bych to chtěl udělat. Pokud tedy existuje okrajový případ, kdy by to znamenalo rozdíl, odpovězte prosím níže.

Protože právě tam bych něco vložil do své PATH a chmod +x it, což je další věc, která přišla po letech Linuxu metodou pokus-omyl.

Což mě přivádí k dalšímu tématu. Například jsem přidal skrytou složku (.scripts/ ) v domovském adresáři do mé PATH pouhým přidáním řádku do mého .bashrc (PATH=$PATH:/home/username/.scripts/ ), takže vše, co je v něm spustitelné, se automaticky dokončuje.

Kdybych to potřeboval.

To ale opravdu nepotřebuji, že? Použil bych to pouze pro jazyky, které nejsou shellem, jako je Python.

Pokud je to shell, mohu napsat funkci do úplně stejného .bashrc :

funcname () {
  somecommand -someARGS "[email protected]"
}

Jak jsem uvedl, spoustu z toho jsem zjistil metodou pokusu a omylu. A skutečně jsem viděl krásu funkcí, až když můj počítač zemřel a byl jsem nucen používat počítače lidí kolem mě, když je nepoužívali.

Místo toho, abych přesouval celý adresář skriptů z počítače do počítače, skončil jsem tak, že jsem nahradil .bashrc všech ostatních svým vlastním, protože nikdy neprovedli ani jedinou úpravu.

Ale uniklo mi něco?

Co byste tedy řekl začínajícímu uživateli Linuxu o tom, kdy použít alias, kdy skript a kdy napsat funkci?

Pokud to není zřejmé, předpokládám, že lidé, kteří na to odpoví, využijí všechny tři možnosti. Pokud používáte pouze aliasy nebo pouze skripty nebo pouze funkce –nebo pokud používáte pouze aliasy a skripty nebo aliasy a funkce nebo skripty a funkce —tato otázka není ve skutečnosti zaměřena na vás.

Přijatá odpověď:

Alias ​​by v podstatě neměl (obecně) dělat víc než jen měnit výchozí možnosti příkazu. Není to nic jiného než jednoduchá náhrada textu v názvu příkazu. S argumenty nemůže nic dělat, ale předat je příkazu, který skutečně spouští. Pokud tedy jednoduše potřebujete přidat argument na začátek jednoho příkazu, alias bude fungovat. Běžné příklady jsou

# Make ls output in color by default.
alias ls="ls --color=auto"
# make mv ask before overwriting a file by default
alias mv="mv -i"

Funkce by se měla použít, když potřebujete udělat něco složitějšího než alias, ale to by samo o sobě nebylo užitečné. Vezměte například tuto odpověď na otázku, kterou jsem se zeptal na změnu grep výchozí chování v závislosti na tom, zda je v kanálu:

grep() { 
    if [[ -t 1 ]]; then 
        command grep -n "[email protected]"
    else 
        command grep "[email protected]"
    fi
}

Je to dokonalý příklad funkce, protože je pro alias příliš složitá (vyžaduje různá výchozí nastavení na základě podmínky), ale není to něco, co byste potřebovali v neinteraktivním skriptu.

Související:Jak zpětně zajistit spuštění skriptu jako root?

Pokud máte příliš mnoho funkcí nebo příliš velkých funkcí, umístěte je do samostatných souborů ve skrytém adresáři a vytvořte je ve vašem ~/.bashrc :

if [ -d ~/.bash_functions ]; then
    for file in ~/.bash_functions/*; do
        . "$file"
    done
fi

Skript by měl stát sám o sobě. Mělo by mít hodnotu jako něco, co lze znovu použít nebo použít pro více než jeden účel.


Linux
  1. Jak získat dokončování bash pro aliasy příkazů?

  2. Jak přidat nové řádky do proměnných ve skriptu Bash?

  3. Jak nastavit parametry, když Pipe Bash Script to Bash?

  1. Shell skript s funkcí a parametrem jako proměnnými?

  2. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  3. Jak vytvářet a volat funkce v Bash

  1. Přidání argumentů a voleb do vašich Bash skriptů

  2. Co znamená Env X=() { :;}; Command‘ Bash dělat a proč je to nejisté?

  3. spuštění php skriptu (funkce php) v linux bash