GNU/Linux >> Linux Esercitazione >  >> Linux

In Bash, quando alias, quando script e quando scrivere una funzione?

Mi ci sono voluti quasi 10 anni di utilizzo di Linux per porre questa domanda. Sono stati tutti tentativi ed errori e una navigazione Internet casuale a tarda notte.

Ma le persone non dovrebbero aver bisogno di 10 anni per questo. Se fossi appena agli inizi con Linux, vorrei sapere:Quando alias, quando script e quando scrivere una funzione?

Per quanto riguarda gli alias, utilizzo gli alias per operazioni molto semplici che non richiedono argomenti.

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

Sembra ovvio. Ma alcune persone lo fanno:

alias command="bash bashscriptname"

(e aggiungilo al .bashrc file)

C'è una buona ragione per farlo? Ci sto provando davvero tanto, ma sinceramente non riesco a pensare a nessuna circostanza in cui vorrei farlo. Quindi, se c'è un caso limite in cui ciò farebbe la differenza, rispondi di seguito.

Perché è lì che metterei semplicemente qualcosa nel mio PATH e chmod +x it, che è un'altra cosa che è arrivata dopo anni di tentativi ed errori di Linux.

Il che mi porta al prossimo argomento. Ad esempio, ho aggiunto una cartella nascosta (.scripts/ ) nella home directory al mio PATH semplicemente aggiungendo una riga al mio .bashrc (PATH=$PATH:/home/username/.scripts/ ), quindi qualsiasi cosa eseguibile lì dentro si completa automaticamente automaticamente.

Se ne avessi bisogno.

Non ne ho davvero bisogno, però, vero? Lo userei solo per linguaggi che non sono la shell, come Python.

Se è la shell, posso semplicemente scrivere una funzione all'interno dello stesso .bashrc :

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

Come ho detto, ho scoperto molto di questo attraverso tentativi ed errori. E ho visto veramente la bellezza delle funzioni solo quando il mio computer è morto e sono stato costretto a usare i computer delle persone intorno a me quando non li usavano.

Invece di spostare un'intera directory di script da un computer all'altro, ho finito per sostituire il .bashrc di tutti gli altri con il mio, dal momento che non avevano mai apportato nemmeno una singola modifica.

Ma mi sono perso qualcosa?

Quindi, cosa diresti a un utente Linux principiante su quando creare un alias, quando eseguire uno script e quando scrivere una funzione?

Se non è ovvio, presumo che le persone che rispondono a questo utilizzeranno tutte e tre le opzioni. Se utilizzi solo alias, o solo script, o solo funzioni, o se utilizzi solo alias e script o alias e funzioni o script e funzioni —questa domanda non è realmente rivolta a te.

Risposta accettata:

Un alias non dovrebbe effettivamente (in generale) fare altro che modificare le opzioni predefinite di un comando. Non è altro che una semplice sostituzione del testo sul nome del comando. Non può fare nulla con gli argomenti ma passarli al comando che esegue effettivamente. Quindi, se devi semplicemente aggiungere un argomento all'inizio di un singolo comando, un alias funzionerà. Esempi comuni sono

# 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"

Una funzione dovrebbe essere utilizzata quando è necessario eseguire qualcosa di più complesso di un alias ma non sarebbe utile da solo. Ad esempio, prendi questa risposta su una domanda che ho posto sulla modifica di grep Il comportamento predefinito di 's a seconda che sia in una pipeline:

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

È un perfetto esempio di funzione perché è troppo complessa per un alias (che richiede impostazioni predefinite diverse in base a una condizione), ma non è qualcosa di cui avrai bisogno in uno script non interattivo.

Correlati:come eseguire retroattivamente uno script come root?

Se ottieni troppe funzioni o funzioni troppo grandi, mettile in file separati in una directory nascosta e cercale nel tuo ~/.bashrc :

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

Uno script dovrebbe stare da solo. Dovrebbe avere valore come qualcosa che può essere riutilizzato o utilizzato per più di uno scopo.


Linux
  1. Aggiunta di argomenti e opzioni ai tuoi script Bash

  2. Come aggiungere nuove righe nelle variabili in Bash Script?

  3. Come impostare i parametri quando Pipe Bash Script su Bash?

  4. Come chiamare una funzione Bash nello script Bash all'interno di Awk?

  5. Script Bash per eliminare tutti i file tranne N quando sono ordinati alfabeticamente

Usa questo utile script Bash quando osservi le stelle

Come scrivere uno script Bash con esempi

Bash Scripting Tutorial per principianti:cos'è, come scriverne uno ed esempi di script

Funzioni Bash

Bash Scripting Part6 – Crea e usa le funzioni Bash

Differenza tra i comandi nello script bash e i comandi nel terminale