#howto - i file di avvio delle shell
Quando aprite un terminale vengono sempre eseguite alcune istruzioni prima che vi venga data la possibilità di scrivere.
Queste operazioni sono descritte e distribuite in vari file, che fanno da “file di avvio” delle shell.
Vediamo quali sono e come modificarli.
Profile
Il file profile viene eseguito alla login dell’utente, rappresenta un file un po’ un punto di ingresso dove poter impostare le proprie variabili d’utente ad esempio oppure dove preparare l’ambiente per la propria shell. Normalmente questo file viene legato alla shell bash
, tuttavia è giusto sapere che è il punto di partenza per diverse shell.
NOTA BENE:
Il file profile viene detto file di avvio delle “Login shell”. È possibile avviare alcune shell in questa modalità forzandola con il parametro
-l
. Ad esempio per bash:bash -l
.
Il file si trova nel percorso /etc/profile
.
Il suo scopo può essere molteplice:
- Impostare le variabili d’ambiente ed esportarle
- Avviare ulteriori script iniziali
- Configurare la Prompt Shell, ovvero colori e informazioni che appaiono a linea di comando
La cartella profile.d
Uno dei compiti del file /etc/profile
è verificare se ci sono script nella cartella /etc/profile.d
ed eventualmente avviarli. Questo controllo avviene in genere con le seguenti istruzioni:
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
Come si può notare, vengono ricercati all’interno della cartella /etc/profile.d
i file con estensione .sh
ed il file sh.local
, questi file vengono caricati non appena si fa la login nel sistema.
File profile locale
In realtà questo file dipende strettamente dalla shell in uso. Normalmente è memorizzato con il percorso /home/nomeutente/.profile
, è possibile anche trovarlo come:
/home/nomeutente/.profile
/home/nomeutente/.bash_login
Come descritto nella wiki di archlinux l’ordine in cui viene controllato su bash è il seguente:
.bash_profile
.bash_login
.profile
Cambiando shell è possibile che questo file venga sostituito, è meglio sempre leggere la documentazione.
Nel caso di ZSH è probabile sia rappresentato da /home/nomeutente/.zprofile
.
Bash
La prima shell con la quale si ha confidenza è sicuramente BASH, il punto di ingresso di qualunque utente linux, preinstallato sulla maggior parte delle distribuzioni.
La bash ha due diversi files che vengono eseguiti:
- bashrc globale: comunemente il file
/etc/bash.bashrc
o/etc/bashrc
, ma meglio guardare il profile - bashrc locale: il file
$HOME/.bashrc
File bashrc globale
Il file bashrc globale si trova nella cartella etc
con nome bash.bashrc
, il percorso completo è: /etc/bash.bashrc
. In alcuni sistemi (come su Fedora) è possibile trovare il file /etc/bashrc
con la stessa funzione, per essere sicuri di quale file venga usato è meglio controllare il file /etc/profile
che dovrebbe richiamarlo esplicitamente.
Normalmente in questo file vengono richiamete tutte quelle direttive che migliorano l’esperienza di bash, ovvero plugin e personalizzazioni. Ad esempio:
- La bash completions, ovvero quella funzione che completa con il tab il comando o i parametri
- La decorazione del PS1, ovvero della prompt shell, come nome utente e nome del pc sul terminale ad inizio comando.
- Le shell options, ovvero i plugin di bash. Questo argomento è stato trattato nell’articolo “velocizzarsi nell’uso del terminale pt. 2 - history e shell options”.
File bashrc locale
Il file locale è quello probabilmente più conosciuto e sfruttato nel mondo linux. Rappresenta un po’ un punto di ingresso di tutti quei curiosi che aggiungono programmi manualmente o iniziano a personalizzare la propria shell.
Ìl file si trova nel percorso /home/nomeutente/.bashrc
e viene eseguito per ultimo, nella catena dei vari file eseguiti all’avvio.
È ovviamente possibile metterci tutto quello che si vuole:
- modifiche a variabili d’ambiente
- esecuzione di altri script di avvio
- modificare ulteriormente il prompt
- richiamare nuove estensioni o shell options
E molto altro
ZSH
ZSH è la shell avanzata per eccellenza, si è distinta soprattutto per il tool “oh-my-zsh
” che permette una configurazione veloce di tema e plugin della shell.
ZSH usa i seguenti file di avvio:
/etc/zsh/zprofile
come file per la login shell globale. Questo file richiama dietro le quinte/etc/profile
./etc/zsh/zshrc
Come file di avvio per la shell interattiva globale./home/nomeutente/.zprofile
per la login shell locale./home/nomeutente/.zshrc
per la shell interattiva locale.
Le modalità in cui vengono usate son le stesse di cui sopra:
- I file di login shell (
zprofile
) vengono eseguiti solo alla login dell’utente oppure se si avvia la shell con il parametrozsh -l
- I file di shell interattiva (
zshrc
) vengono eseguiti ogni volta che si apre una shell.
L’ordine di esecuzione è il seguente:
- profile globale
- profile locale
- zshrc glopbale
- zshrc locale
Fish
FISH è una shell molto avanzata, con una sintassi totalmente diversa da quella che viene utilizzata per le shell più comuni come bash o zsh.
A differenza di bash o zsh, non utilizza /etc/profile
e questo normalmente può rappresentare un problema in quanto spesso i software tendono ad aggiungere il loro path di esecuzione o le loro variabili d’ambiente in questo file o nella cartella /etc/profile.d
. Questa pratica è infatti errata, perché il giusto modo di impostare una variabile d’ambiente dovrebbe essere quella di assegnarla in /etc/environments
, tuttavia spesso viene fatto questo errore in alcuni software.
Il file utilizzato da fish per l’avvio è invece fish.config
sia nel caso di shell interattive che nel caso di shell di login (vi son ovviamente dei metodi per distinguere i due casi). Nello specifico si ha:
- Il file
/etc/fish/config.fish
come file di avvio globale. - Il file
/home/nomeutente/.config/fish/fish.config
per l’avvio locale.
Ma per impostare invece le variabili d’ambiente in locale si può usare il file /home/nomeutente/.config/fish/fish_variables
aggiungendo con la seguente sintassi il contenuto della variabile:
SETUVAR NOMEVARIABILE:valorevariabile
Login interattiva su FISH
Per identificare, in uno dei file di configurazione, la shell interattiva su FISH basta inserire le proprie istruzioni all’interno di questo blocco if
if status is-interactive
#QUI SCRIVI LE ISTRUZIONI
endh
Shell login su FISH
Per identificare, in uno dei file di configurazione, una login shell su FISH basta inserire le proprie istruzioni all’interno di questo blocco if:
if status is-login
#QUI SCRIVI LE ISTRUZIONI
endh
Per avviare una shell di login con fish in maniera forzata si può digitare:
fish -l
Bass
Bass è un interessante tool open source per utilizzare script bash dentro la shell fish. È utile soprattutto se si pensa di dover riscrivere file di configurazione importanti come quelli presenti nella cartella /etc/profile.d
. Fondamentalmente si tratta di un plugin per FISH che si può installare come segue:
git clone https://github.com/edc/bass
cd bass
make install
Per utilizzarlo basta scrivere:
bass istruzione bash
Ad esempio per fare il source di profile scrivere:
bash source /etc/profile