Jump to content
  • Taking control of your fortunes on Linux

    aum

    • 348 views
    • 6 minutes
     Share


    • 348 views
    • 6 minutes

    The fortune command might be more versatile than you realize.

     

    The fortune command is generally considered one of the just-for-fun commands that you’ll find on linux systems, but it can prove useful in some interesting ways.

     

    How it works


    Probably most Linux users run the fortune command only when they’re bored, though I’ve known a few who added the fortune command to the end of their .bashrc files so that every login would provide a little quote or a saying that they’d ponder for as much as 30 seconds before proceeding to more serious work.

     

    The fortune command is, however, more versatile than many Linux users realize. In fact, most of the responses to typing “fortune” are not really fortunes at all. Rather than predicting your future or even just the outcome of your day, they provide quotes or lighthearted comments.

     

    By default, the responses to typing “fortune” come from any of a fairly large series of files. On my fedora system, there are 48 such files that my “fortune” can be drawn from.

     

    What you can do with the fortune command


    If you want your fortune to be derived from a file related to a particular subject area, you can provide it as an argument like this:

     

    $ fortune food
    A waist is a terrible thing to mind.
                    -- Ziggy


    To do this, however, it’s good to know what subject areas are available. On my systems, these are my options:

    $ cd /usr/share/games/fortune; ls *.dat | sed "s/.dat//" | column
    art             food              law             people               sports
    ascii-art       fortunes          linux           perl                 startrek
    bofh-excuses    goedel            literature      pets                 tao
    computers       hitchhiker        love            platitudes           translate-me
    cookie          humorists         magic           politics             wisdom
    definitions     humorix-misc      medicine        pratchett            work
    disclaimer      humorix-stories   miscellaneous   riddles              zippy
    drugs           kernelnewbies     news            rules-of-acquisition
    education       kids              osfortune       science
    ethnic          knghtbrd          paradoxum       songs-poems

    Once you know the topic areas, you can use any of them to get a fortune which aligns with your mood.

     

    $ fortune politics
    The time for action is past!  Now is the time for senseless bickering.


    Creating your own fortunes


    If the topic areas don’t meet your needs, don’t fret. You can make your own! In fact, it’s quite easy to do so. You need to create a file with a particular format and then run one command to make the data compatible with the fortune command’s requirements.

     

    To test this out, I created a file with a few happy quotes. I need a daily dose of happiness and thought these quotes would be nice to work with. I referred to my file as “happy quotes” and added this content:

     

    $ cat happy_quotes
    You're never fully dressed without a smile.
    %
    Let a smile be your umbrella.
    %
    Happiness depends upon ourselves.
    %
    Happiness is when what you think, what you say, and what you do are in harmony.


    Notice that I used % signs to separate the lines of text. None are needed at the bottom.

     

    The next thing I did was run the command below to create the quotes.dat file that the fortune command requires.

     

    $ strfile -c % happy_quotes happy_quotes.dat


    When I run a command like fortune happy_quotes, I get a response like this:

     

    $ fortune happy_quotes

    You're never fully dressed without a smile.


    Of course, with only four happy quotes, I’m going to quickly get tired of the responses. And I’m afraid that no one else who uses my system will see any of my happy quotes because the file is in my home directory, not the /usr/share/games/fortune directory, though I could change that.

     

    Other uses for “fortunes”


    In addition to its entertainment or enlightenment value, the fortune command offers a few more uses that might not be immediately obvious. I use the fortune command to create random text files that I use for testing various commands and scripts. A command like this generates a small file of that variety:

     

    $ fortune > file1
    $ ls -l file1
    -rw-r--r--. 1 shs shs 244 Sep 22 13:53 file1


    If you need a larger randomly generated text file, just run the command just shown and then follow it with additional commands of this variety:

     

    $ fortune >> file1
    $ fortune >> file1


    The file should soon be large enough.

     

    You can also use the responses from the fortune command to generate random numbers. The -c argument to the wc command yields the count of characters in each fortune.

     

    $ fortune | wc -c
    107
    $ fortune | wc -c
    226
    $ fortune | wc -c
    86


    If the resultant numbers are not sufficiently large or sufficiently random for your purpose, create an alias with as many calls to fortune as you might need.

     

    $ alias randnum='expr `fortune | wc -c` \* `fortune | wc -c` \* `fortune | wc -c`'
    $ randnum
    1793660
    $ randnum
    878292


    Of course, you’re not going to get any small numbers by multiplying the number of characters in each of three text files.

     

    Another option is to use the fortune command to randomize data for some other use. For example, put all your friends’, coworkers’ or contest participants’ names into a file and use the fortune command to pick a winner.

     

    Once you’ve got the names in a text file with lines separated by % characters, you can create your.dat file and do a drawing that depends on the randomness of the fortune command to play fair.

     

    $ strfile -c % friends friends.dat
    "friends.dat" created
    There were 15 strings
    Longest string: 12 bytes
    Shortest string: 4 bytes

     

    $ fortune friends
    Rebecca

     

    How many fortunes are available?


    Out of curiosity, I wrote a script to count the number of fortunes available in the /usr/share/games/fortune directory on my system. The script looks like this:

     

    #!/bin/bash

     

    total=0

     

    for file in `ls /usr/share/games/fortune | grep -v "\."`
    do
      num=`grep % $file | wc -l`
      num=`expr $num - 1`
      total=`expr $total + $num`
    done


    The grep command ensures that only the fortune source files (those without file extensions) are used to collect the tally. I was pleased by the number available as it makes it unlikely that you’ll see any particular fortune more than once.

     

    $ count_all_fortunes
    16139


    Wrap-up


    The fortune command can be mildly entertaining or quite useful. Since the fortune I pulled out of my fortune cookie at lunch time provided this fortune, I’m going to assume that at least a few of you enjoyed this post. 😉

     

    They’ll definitely remember all your efforts.

     

    Source


    User Feedback

    Recommended Comments

    There are no comments to display.



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...