Introduzione a Unix
Indietro | Capitolo 5 Shell | Avanti

# 5.4 La shell C, csh

La shell C, csh(1), usa i file di inizializzazione `.cshrc` e `.login`. Alcune versioni usano un file di inizializzazione globale del sistema, ad esempio `/etc/csh.login`. Il proprio file `.login` è eseguito solamente quando si effettua il login. Il proprio file `.cshrc` è eseguito ogni volta in cui si avvia una shell csh(1), incluso quando si effettua il login. Questo file ha molte caratteristiche simili al file `.profile`, ma un differente modo di composizione. Qui si usano i comandi `set` o `setenv` per inizializzare una variabile, dove `set` viene usato per definire una variabile solo per la shell corrente, mentre `setenv` definisce una variabile per la shell corrente e per le altre sotto-shell. Le variabili di ambiente `USER`, `TERM` e `PATH` sono automaticamente importate ed esportate dalle variabili `user`, `term` e `path` della shell csh(1). Quindi `setenv` non è necessario per queste variabili. La shell C usa il simbolo ~ per indicare la directory home dell'utente in un path, come in `~/.cshrc` o per specificare una directory di login di un altro utente, come in `~`username`/.cshrc`.

Alcune variabili predefinite usate dalla shell C sono:

`argv` | La lista degli argomenti della shell corrente
`cwd` | La directory di lavoro corrente
`history` | Imposta la dimensione della lista di history (storia) da memorizzare
`home` | La directory home dell'utente, visualizzabile con `$HOME`
`ignoreeof` | Quando viene settata, EOF (Ctrl+D) viene ignorato dal terminale
`noclobber` | Quando viene settata si impedisce di redirigere l'output per sovrascrivere file esistenti
`noglob` | Quando viene settata si impedisce l'espansione dei nomi di file all'interno di un confronto con uno schema wild card
`path` | I path di ricerca dei comandi, visualizzabile con `$PATH`
`prompt` | Setta il prompt della linea di comando (`%` di default)
`savehist` | Numero di volte (di login) che bisogna mantenere memorizzata la lista di history nel file `.history`
`shell` | Il path name completo della shell corrente, visualizzabile con `$SHELL`
`status` | Il codice di stato di uscita dell'ultimo comando (0=uscita normale, 1=comando fallito)
`term` | Il proprio tipo di terminale, visualizzabile con `$TERM`
`user` | Il proprio nome utente, username, visualizzabile con `$USER`

Un semplice file `.cshrc` potrebbe essere come il seguente:

    set path=(/usr/bin /usr/ucb /usr/local/bin ~/bin . ) # setta il path
    set prompt = "{`hostname` `whoami` !} "   # setta il promt primario ;
                                              # % di default
    set noclobber                  # non redirige l'output su file esistenti
    set ignoreeof                      #ignora EOF (Ctrl+D) in questa shell
    set history=100 savehist=50   # mantiene una lista history di comandi e la
                                  # memorizza tra vari (50) login
    # alias
    alias h history                    # alias h per history
    alias ls "/usr/bin/ls -sbF"        # alias ls per ls -sbF
    alias ll ls -al              # alias ll per ls -sbFal (combina queste
                                 # opzioni con quelle di ls sopra citate)
    alias cd 'cd \!*;pwd'        # alias cd per stampare la directory di lavoro
                                 # corrente dopo aver cambiato directory
    umask 077

Alcune nuove caratteristiche che non sono state viste nel file `.profile` (shell sh(1)) sono `noclobber`, `ignoreeof` e `history`. `Noclobber` indica che l'output non può essere rediretto su un file esistente, mentre `ignoreeof` specifica che EOF ( Ctrl+D) non causa l'uscita dalla shell di login o l'uscita dal sistema.

Con la caratteristica di history si possono richiamare comandi eseguiti precedentemente e rieseguirli, eventualmente con dei cambiamenti.

Un alias permette di usare uno specifico nome alias al posto del comando completo. Nell'esempio precedente, il risultato di digitare `ls` sarà quello di eseguire `/usr/bin/ls -sbF`. Si può verificare quale comando `ls` è nel proprio path con il comando which(1), ad esempio:

    % which ls
    ls:     alias di /usr/bin/ls -sbF

Un semplice file `.login` potrebbe essere come il seguente:

    # .login
    stty erase ^H      # setta Control+H come tasto di eliminazione
    set noglob     # impedisce un confronto con uno schema wild card
    eval `tset -Q -s -m ':?xterm'`  # chiede il tipo di terminale presupponendo
                                    # xterm
    unset noglob       # riabilita un confronto con uno schema wild card

Abilitando e disabilitando `noglob` intorno a tset(1) si impedisce di confondere il tipo di terminale con qualche espansione dei nomi di file in un confronto con uno schema (pattern) wild card.

Se si effettuano cambiamenti al proprio file di inizializzazione, questi possono essere attivati eseguendo il file modificato. Per la shell csh(1) questo è possibile attraverso il comando built-in `source`, esempio:

`source .cshrc`

Per altre informazioni circa la shell csh(1) digitare `man csh` al prompt di shell.

Indietro | Partenza | Avanti
La shell Bourne, sh | Risali | Controllo dei job

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.