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.