linux user group brescia

immagine del castello

Archivio della mailing list

info 004: scripting...

Maurizio Paolini paolini a dmf.bs.unicatt.it
Mar 16 Gen 2001 17:36:41 UTC
>    (Tra l'altro: viene eseguito prima .bashrc o .profile?)

Bisogna quardarsi la "man bash", al momento non ricordo.  Pero' ricorda
che ".profile" viene eseguito SOLO se bash viene chiamato come "login
shell" (che e' il tuo caso, mi pare), mentre ".bashrc" viene eseguito
negli altri casi (o in ogni caso, non sono sicuro).
Se ad esempio uno script inizia con 

   #!/bin/bash

quando lo invochi (scrivendo il suo nome), in realta' viene attivato un
nuovo "bash" annidato, che NON e' di tipo "login"

>    "exec bash"... mmmh, devo studiarci sopra...

Diciamo che si tratta di una spece di "goto" senza possibilita' di
ritorno: il nuovo processo "sostituisce" il processo attuale, e quando
termina, il controllo passa direttamente al processo che ha invocato
il processo che esegue "exec bash"...

>    
> > c'e' anche il comando "who am i", che ti dice su quale terminale sei
> > collegato.  Puoi anche sostituire "tr -s ' ' '!' | cut -d! -f3" con
> > "tr -s ' ' | cut -d' ' -f3". 
>
>    Lo sapevo, che doveva esserci qualcosa di piu` semplice!
>    
>    "who am i"
>    pazzesco! :)

Beh, il bello e' che per funzionare, il comando who controlla unicamente
CON QUANTI PARAMETRI e' stato chiamato, quindi il comando:

   who are you

e' esattamente equivalente a "who am i"    :-)

Per inciso, esiste anche il comando "whoami", che pero' fornisce un output
diverso (il solo username).

>
>    (non per dire, ma se qualcuno non te lo dice, come fai ad immaginarti una
>    cosa del genere? A parte leggersi qualche quintale di manuali, intendo...

per tradizione orale...

>    come se a qualcuno, sotto dos, venisse in mente di scrivere "dimmi chi
>    sono", cosi`, tanto per provarci... )
>    
> > Pero' credo esista la possibilita' di mettere comandi da eseguire al
> > logout in un file di nome ".logout", ma forse solo per la "tcsh".
>
>    Anche qua, e` un bel casino... "l'imbarazzo della scelta", si diceva una
> volta: vale la pena di studiarsi tutte le varie shell? Per ora, cmq, bash mi
> basta e avanza... :)

per la bash e' il file ".bash_logout".  Vedi "man bash", nella sezione
"INVOCATION".  In ogni caso, la man di "bash" e' una cosa da leggersi
(almeno una volta nella vita).

>  
> > Inoltre il tuo problema lo puoi risolvere creando un "alias" (comando da
> > mettere nella ".profile":
>  
> >    alias logout exit
>
>    Azz... gli 'alias'... mi ci sono scontrato da subito...
> Volevo fare un alias list='less $1', o qualcosa del genere, ma non ci sono
> riuscito, e quindi non ci ho piu` pensato...

Mi sono confuso, e ti ho scritto la sintassi per la "csh" o la "tcsh".
Per la bash la sintassi e':

   alias list=less

Non ci devi mettere il "$1". Gli argomenti del nuovo comando "list" vengono
passati come argomenti di "less".  Non si puo' fare cose piu' complicate
con la bash, come invece si puo' fare con csh o tcsh.  Cito infatti dal
"man bash":

       There is no mechanism for using arguments in the  replaceĀ­
       ment  text,  as  in csh.  If arguments are needed, a shell
       function should be used.                                                 

>
>    Azz... in immediato funziona, ma da script no...
>
>    "   logout: not login shell: use `exit'   "

Qui il problema e' che gli "alias" NON sono ereditati da un sottoprocesso.
Quindi, quando invochi "bash", gli alias definiti per la bash di login
vengono persi.  L'unica possibilita' e' mettere il comando "alias" nella
".bashrc" anziche' nella ".profile", che viene eseguita ad OGNI invocazione
di bash.

mp



Maggiori informazioni sulla lista Lug