fortune
print a random, hopefully interesting, adage
see also :
strfile - unstr
Synopsis
fortune
[-acefilosuw] [-n length] [
-m pattern] [[n%]
file/dir/all]
add an example, a script, a trick and tips
examples
A great way to use fortune is to add this command at the end of your ~/.bashrc file. Every time you will open a terminal/console, you will have a great adage !
type in your terminal :
echo fortune >> ~/.bashrc
example added by LeBerger
description
When
fortune is run with no arguments it prints out a
random 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.)
-c
Show the cookie file from which the fortune came.
-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 regular expression pattern. The
syntax of these expressions depends on how your system
defines re_comp(3) or regcomp(3), but it
should nevertheless 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) considered 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 ask for short fortunes, or too long and
ask for long ones, fortune goes into a never-ending
thrash loop.
-o
Choose only from potentially offensive aphorisms. The
-o option is ignored if a fortune directory is
specified.
Please,
please, please request a potentially offensive 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 philosophy 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 calculated
from the number of characters in the message. 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.
-u
Don’t translate UTF-8 fortunes to the locale
when searching or translating.
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 inclusive,
followed by a %. If it is, there will be a n
percent 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 directories, 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
will pick out
90% of its fortunes from funny (the ’’10%
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
separate 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 definitions 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/fortunes
Directory for innoffensive fortunes.
/usr/share/games/fortunes/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 separate directory. The
workaround, of course, is to move the ’-o’
files into the offensive directory (with or without
renaming), and to use the -a option.
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 repetitiousness. 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, definitions), and
some by content (religion, politics). There are parallel
files in the main directory and in the offensive files
directory (e.g., fortunes/definitions and
fortunes/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-delimited strings,
which were stored after the table of pointers 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 inadvertently discovered and fixed
during this process.
At a guess, a
great many people have worked on this program, many without
leaving attributions.
see also
re_comp,
regcomp, strfile , unstr