fortune is a fun UNIX program that’s traditionally installed on all UNIX-like machines. It usually lives in /usr/games. Its purpose is to print a fortune from one of several databases. They’re usually funny. On most Linux distros, the original fortune (as created in 4.2BSD and maintained by NetBSD) is not used, but a clone, usually called fortune-mod, is installed in its place. My shells automatically print a fortune on login but you can get a fortune anytime by typing “fortune”.
My initial shell is Bash since my usual purpose for logging onto the server via shell is system administration. But today, I want to hack some source, so I start a csh session. On login, when Bash starts, it automatically gives me a fortune. Since /etc/csh.cshrc also contains code to print a fortune (for those who have csh as their default shell), I get a second fortune when I start csh.
Sorry for being in Windoze – I’m there so I can play WoW but I suddenly got inspiration to look into something in a binary image format converter I’m working on. Rather than reboot into RHEL to edit the source, I just started up PuTTY. It’s Advent now, so my windows are blue 🙂
UPDATE: Here’s the manpage for the fortune command from the fortune-mod package for RHEL 5.4:
FORTUNE(6) UNIX Reference Manual FORTUNE(6) NAME fortune - print a random, hopefully interesting, adage SYNOPSIS fortune [-acefilsw] [-n length] [ -m pattern] [[n%] file/dir/all] DESCRIPTION When fortune is run with no arguments it prints out a random epigram. Epigrams are divided into several categories. Options The options are as follows: -a Choose from all lists of maxims. -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 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 use- ful if you wish to remove the gathered matches from their origi- nal 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. -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. 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 percent probability that an adage will be picked from that file or directory. If the per- centages do not sum to 100, and there are specifications without per- centages, 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 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 FILES Note: these are the defaults as defined at compile time. /usr/share/games/fortune Directory for 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 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 rep- etitiousness. 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 con- tent (religion, politics). 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 advan- tage is that the text files can be easily edited without resorting to unstr, and there is a potential savings in disk space (on the assump- tion 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 discov- ered and fixed during this process. At a guess, a great many people have worked on this program, many with- out leaving attributions. SEE ALSO re_comp(3), regcomp(3), strfile(1), unstr(1) BSD Experimental 19 April 94 [May. 97] FORTUNE(6)