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.

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>.