fortune - print a random, hopefully interesting, adage
SYNOPSIS
fortune [-aefilosw] [-n length] [ -m pattern] [[n%]
file/dir/all]
DESCRIPTION
When fortune is run with no arguments it prints out a ran
dom epigram. Epigrams are divided into several categories,
where each category is sub-divided into those which are
potentially offensive and those which are not.
Options
The options are as follows:
-a Choose from all lists of maxims, both offensive and
not. (See the -o option for more information on
offensive fortunes.)
-e Consider all fortune files to be of equal size (see
discussion below on multiple files).
-f Print out the list of files which would be
searched, but don't print a fortune.
-l Long dictums only. See -n on how ``long'' is
defined in this sense.
-m pattern
Print out all fortunes which match the basic regu
lar expression pattern. The syntax of these
expressions depends on how your system defines
re_comp(3) or regcomp(3), but it should neverthe
less be similar to the syntax used in grep(1).
The fortunes are output to standard output, while
the names of the file from which each fortune comes
are printed to standard error. Either or both can
be redirected; if standard output is redirected to
a file, the result is a valid fortunes database
file. If standard error is also redirected to this
file, the result is still valid, but there will be
``bogus'' fortunes, i.e. the filenames themselves,
in parentheses. This can be useful if you wish to
remove the gathered matches from their original
files, since each filename-record will precede the
records from the file it names.
-n length
Set the longest fortune length (in characters) con
sidered to be ``short'' (the default is 160). All
fortunes longer than this are considered ``long''.
Be careful! If you set the length too short and
long ones, fortune goes into a never-ending thrash
loop.
-o Choose only from potentially offensive aphorisms.
Please, please, please request a potentially offen
sive fortune if and only if you believe, deep in
your heart, that you are willing to be offended.
(And that you'll just quit using -o rather than
give us grief about it, okay?)
... let us keep in mind the basic governing philos
ophy of The Brotherhood, as handsomely summarized
in these words: we believe in healthy, hearty
laughter -- at the expense of the whole human race,
if needs be. Needs be.
--H. Allen Smith, "Rude Jokes"
-s Short apothegms only. See -n on which fortunes are
considered ``short''.
-i Ignore case for -m patterns.
-w Wait before termination for an amount of time cal
culated from the number of characters in the mes
sage. This is useful if it is executed as part of
the logout procedure to guarantee that the message
can be read before the screen is cleared.
The user may specify alternate sayings. You can specify a
specific file, a directory which contains one or more
files, or the special word all which says to use all the
standard databases. Any of these may be preceded by a
percentage, which is a number n between 0 and 100 inclu
sive, followed by a %. If it is, there will be a n per
cent probability that an adage will be picked from that
file or directory. If the percentages do not sum to 100,
and there are specifications without percentages, the
remaining percent will apply to those files and/or direc
tories, in which case the probability of selecting from
one of them will be based on their relative sizes.
As an example, given two databases funny and not-funny,
with funny twice as big (in number of fortunes, not raw
file size), saying
fortune funny not-funny
will get you fortunes out of funny two-thirds of the time.
The command
fortune 90% funny 10% not-funny
not-funny'' is unnecessary, since 10% is all that's left).
The -e option says to consider all files equal; thus
fortune -e funny not-funny
is equivalent to
fortune 50% funny 50% not-funny
This fortune also supports the BSD method of appending
``-o'' to database names to specify offensive fortunes.
However this is not how fortune stores them: offensive
fortunes are stored in a seperate directory without the
``-o'' infix. A plain name (i.e., not a path to a file or
directory) that ends in ``-o'' will be assumed to be an
offensive database, and will have its suffix stripped off
and be searched in the offensive directory (even if the
neither of the -a or -o options were specified). This
feature is not only for backwards-compatibility, but also
to allow users to distinguish between inoffensive and
offensive databases of the same name.
For example, assuming there is a database named defini
tions in both the inoffensive and potentially offensive
collections, then the following command will select an
inoffensive definition 90% of the time, and a potentially
offensive definition for the remaining 10%:
fortune 90% definitions definitions-o
FILES
Note: these are the defaults as defined at compile time.
/usr/share/games/fortune
Directory for innoffensive fortunes.
/usr/share/games/fortune/off
Directory for offensive fortunes.
If a particular set of fortunes is particularly unwanted,
there is an easy solution: delete the associated .dat
file. This leaves the data intact, should the file later
be wanted, but since fortune no longer finds the pointers
file, it ignores the text file.
BUGS
The division of fortunes into offensive and non-offensive
by directory, rather than via the `-o' file infix, is not
100% compatible with original BSD fortune. Although the
`-o' infix is recognised as referring to an offensive
database, the offensive database files still need to be in
a seperate directory. The workaround, of course, is to
move the `-o' files into the offensive directory (with or
The supplied fortune databases have been attacked, in
order to correct orthographical and grammatical errors,
and particularly to reduce redundancy and repetition and
redundancy. But especially to avoid repititiousness.
This has not been a complete success. In the process,
some fortunes may also have been lost.
The fortune databases are now divided into a larger number
of smaller files, some organized by format (poetry, defi
nitions), and some by content (religion, politics). There
are parallel files in the main directory and in the offen
sive files directory (e.g., fortunes/definitions and for
tunes/off/definitions). Not all the potentially offensive
fortunes are in the offensive fortunes files, nor are all
the fortunes in the offensive files potentially offensive,
probably, though a strong attempt has been made to achieve
greater consistency. Also, a better division might be
made.
HISTORY
This version of fortune is based on the NetBSD fortune
1.4, but with a number of bug fixes and enhancements.
The original fortune/strfile format used a single file;
strfile read the text file and converted it to null-delim
ited strings, which were stored after the table of point
ers in the .dat file. By NetBSD fortune 1.4, this had
changed to two separate files: the .dat file was only the
header (the table of pointers, plus flags; see strfile.h),
and the text strings were left in their own file. The
potential problem with this is that text file and header
file may get out of synch, but the advantage is that the
text files can be easily edited without resorting to
unstr, and there is a potential savings in disk space (on
the assumption that the sysadmin kept both .dat file with
strings and the text file).
Many of the enhancements made over the NetBSD version
assumed a Linux system, and thus caused it to fail under
other platforms, including BSD. The source code has since
been made more generic, and currently works on SunOS 4.x
as well as Linux, with support for more platforms expected
in the future. Note that some bugs were inadvertantly
discovered and fixed during this process.
At a guess, a great many people have worked on this pro
gram, many without leaving attributions.
SEE ALSO
re_comp(3), regcomp(3), strfile(1), unstr(1)
Man(1) output converted with
man2html