Sottotitolo: Per farci qualcosa di utile?
Una delle prime cose che faccio quando prendo possesso della mia nuova home directory in un sistema linux è personalizzare la sequenza di login del terminale. Trovo molto comodo, al login, trovarmi nella directory in cui mi trovavo al momento di chiudere il terminale. Pensavo che la cosa fosse scontata e che si trattasse di una pratica comune ma, a quanto pare non è così e quindi ho pensato di scriverne.
Le sequenze di login e di logout
Quando Bash viene invocato come shell di login esegue per prima cosa il file /etc/profile. Fatto questo bash cerca, nell’ordine, i file ~/.bash_profile, ~/.bash_login, and ~/.profile, esegue in contenuto del primo che trova e si ferma. All’uscita, invece, una shell di login esegue il file ~/.bash_logout.
Gli script
Una volta capito il funzionamento della sequenza di avvio ed uscita dal terminale, basta dare un’occhiata al man, basta costruire due semplici script, uno per il logout (la prima riga non commentata):
# ~/.bash_logout: executed by bash(1) when login shell exits.
# when leaving the console clear the screen to increase privacyecho “cd `pwd`” > ~/.bash_resumedir
if [ “$SHLVL” = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
ed uno per il login:
# ~/.bash_login: executed by bash(1) when login shell is invoked.
if [ -f ~/.bash_resumedir ]; then
source ~/.bash_resumedir
fi
Ho usato source, piuttosto che invocare direttamente il file, perché altrimenti il cambio di directory sarebbe durato al massimo qualche fraziode di secondo (la durata dell’esecuzione dello script) e quindi non sarebbe stato molto utile :).
gnome-terminal
Ci resta un altro pezzo del puzzle da piazzare. gnome-terminal, il mio terminale di riferimento (si, lo so che sono obsoleto) non si comporta da login shell e quindi lo stratagemma non funziona fino a che non ne verrà cambiata la configurazione di default.
Più facile a farsi che a dirsi. Basta modificare il proprio profilo (menu: Modifica > Profili…), spuntare nella scheda [Titolo e comando] la voce [Eseguire il comando come una shell di login] ed il giochetto, dall’apertura successiva del terminale, comincerà a funzionare a meraviglia.
Ciao!
Ho provato a seguire il tuo consiglio su un Mac, ma senza risultato. Sembra che il file ~/.bash_logout non venga letto alla chiusura della finestra corrente di terminale. Ho provato pure a renderlo eseguibile con chmod u+x, ma senza risultato.
Grazie,
Guido
Purtroppo non ho a disposizione un mac e quindi non posso verificare quello che scrivo.
Da una veloce scorsa a google ho scoperto che la shell do default di mac os non è bash ma tcsh. Quest’ultima usa file diversi da quelli usati da bash per le sequenze di login/logout: ~/.login e ~/.logout rispettivamente.
Hai due strade per risolvere il problema:
– selezionare bash come shell di default
– cambiare il nome dei file riportati nel mio post
In ogni caso ti lascio un link ad una documentazione molto chiara sull’argomento.
http://www.faqintosh.com/178.html
Fammi sapere come sarai riuscito a risolvere.
Ciao eineki,
grazie della risposta. Da Mac Os X 10.3, la shell di defaut è bash; tcsh era la precedente. Comunque fa nulla, credo sopravviverò senza questa funzionalità 🙂
Comunque, ti segnalo un’ottima guida per ottimizzare il proprio rendimento usando bash:
http://www.caliban.org/bash/index.shtml
La variabile d’ambiente CDPATH in particolare è utilissima.
Spero ti sia utile.
Ciao,
Guido
Rettifico! Il file corretto è effettivamente ~/.bash_logout, solo che sotto Mac Os X viene eseguito solamente quando si esce esplicitamente da una finestra di terminale con il comando “exit”. Chiudere la finestra di terminale direttamente non basta. Immagino che sia più o meno quello che succede con un gnome-terminal non configurato, solo che il terminale di Mac Os X (Terminal.app) non ha la spunta [Eseguire il comando come una shell di login].
Ciao,
Guido
Premettendo che ognuno ha la propria soluzione ideale, io mi trovo benissimo a ritornare nella mia home alla partenza.
Nel caso avessi bisogno di rimanere in un determinato path o addirittura di lasciare in esecuzione un processo, preferisco di gran lunga usare screen (comodissimo quando lancio un elaborazione da casa e poi mi riconnetto da remoto via ssh).