L'utilità cat può leggere file in sequenza e può scrivere i loro contenuti sullo standard output nella stessa sequenza.
L'utilità cat deve essere conforme al volume Base Definitions di IEEE Std 1003.1-2001, Sezione 12.2, Utility Syntax Guidelines.
Devono essere supportate le seguenti opzioni:
Devono essere supportati i seguenti operandi:
Lo standard input deve essere usato solo se non sono specificati operandi file, o se un operando file è '-' . Vedere la sezione FILE DI INPUT.
I file di input possono essere di qualunque tipo.
Le seguenti variabili d'ambiente possono influenzare l'esecuzione di cat:
Lo standard output deve contenere la sequenza di byte letta dai file di input. Sullo standard output non dovrebbe essere scritto nient'altro.
Lo standard error deve essere usato solo per i messaggi di diagnostica.
In uscita devono venire restituiti i seguenti valori:
Default.
Le seguenti sezioni sono informative.
L'opzione -u ha valore nella prototipazione di letture non bloccanti da FIFO. L'intento è di supportare la seguente sequenza:
mkfifo foo cat -u foo > /dev/tty13 & cat -u > foo
Non è specificato se lo standard output è o meno bufferizzato nel caso di default. Questo talvolta è di interesse quando lo standard output è associato ad un terminale, poiché la bufferizzazione può rallentare l'output. La presenza dell'opzione -u garantisce che sia disponibile I/O non bufferizzato. Dipende dall'implementazione de l'utilità cat bufferizza l'output se l'opzione -u non è specificata. Tradizionalmente l'opzione -u è implementata usando l'equivalente della funzione setvbuf() definita nel volume System Interfaces di IEEE Std 1003.1-2001.
Il seguente comando:
cat myfile
scrive i contenuti del file myfile sullo standard output.
Il seguente comando:
cat doc1 doc2 > doc.all
concatena i file doc1 e doc2 e scrive i risultati su doc.all.
Poiché il meccanismo del linguaggio della shell usato per eseguire la redirezione dell'output, un comando come questo:
cat doc doc.end > doc
provoca la perdita dei dati originali in doc.
Il comando:
cat start - middle - end > file
quando lo standard input è un terminale, prende due pezzi arbitrari di input dal terminale con una singola invocazione di cat. Notare, tuttavia, che se lo standard input è un file regolare, questo sarà equivalente al comando:
cat start - middle /dev/null end > file
poiché l'intero contenuto del file sarà consumato da cat la prima volta che '-' è stato usato come operando file e una condizione end-of-file è stata individuata immediatamente quando '-' è stato referenziato la seconda volta.
Versioni storiche dell'utilità cat includono le opzioni -e, -t, e -v, che permettono terminazioni di linea, <tab> e caratteri invisibili, rispettivamente, per essere resi visibili sull'output. Gli sviluppatori dello standard hanno omesso queste opzioni perché esse forniscono un grado di controllo troppo fine su ciò che viene reso visibile, e un output simile può essere ottenuto usando un comando come:
sed -n -e 's/$/$/' -e l pathname
L'opzione -s è stata omessa perché corrisponde a differenti funzioni in sistemi BSD e System V. L'opzione BSD -s per comprimere linee vuote può essere soddisfatta dallo script di shell mostrato nel seguente esempio:
sed -n '
# Scrive linee non vuote.
/./ {
p
d
}
# Scrive una singola linea vuota, quindi cerca altre linee vuote.
/^$/ p
# Legge la linea successiva, scarta il controllo <newline> (lina vuota),
# e cerca altre linee vuote.
:Empty
/^$/ {
N
s/.//
b Empty
}
# Scrive la linea non vuota prima di tornare a cercare
# la prima in un insieme di linee vuote.
p
L'opzione System V -s per non mostrare i messaggi di errore può essere soddisfatta redirigendo lo standard error. Notare che la documentazione BSD per cat usa il termine "blank line" per indicare la stessa cosa del POSIX "empty line'': una linea contenente solo un carattere <newline>.
L'opzione BSD -n è stata omessa perché funzionalità simili possono essere ottenute dall'opzione -n dell'utilità pr.
more , il volume System Interfaces di IEEE Std 1003.1-2001, setvbuf()