Cowsay is a fun little app that draws a cow that says things, but you can do so
much more than a cow, there's all sorts of fun ascii art critters in there; but
how do we get to them? Lots of solutions simply find the directory where
cowfiles (the templates that define the critters) are stored and hard-code that;
but how do you know where they are?

Turns out, cowsay will tell you if you pass the `-l` flag like so:

   $>cowsay -l

which outputs the directory, and a list of all available cowfiles - much simpler
than using `find`. But if there's a list of cowfiles there, why bother using
`ls` to get the directory listing? simply trim off the first line by piping to
`sed`, and ask it to delete it

   $>cowsay -l  | sed "1 d"

now we've got a nice clean list to randomize; You could use `shuf`, or bash's
built-in array-mangling utilities; for sake of portability, this script uses
both:


   #! /bin/bash

   if type shuf >/dev/null 2>&1; then
     cowfile="$(cowsay -l | sed "1 d" | tr ' ' '\n' | shuf -n 1)"
   else
     cowfiles=( $(cowsay -l | sed "1 d") );
     cowfile=${cowfiles[$(($RANDOM % ${#cowfiles[*]}))]}
   fi
   cowsay -f "$cowfile" -W 79 "$@"



store that as a script (i.e. [`cowsay.sh`][1]), put it in your path, and soon you
will find randomized cow bliss. check it out

   $>fortune | cowsay.sh
____________________________________
/ Is that really YOU that is reading \
\ this?                              /
------------------------------------
                      \                    ^    /^
                       \                  / \  // \
                        \   |\___/|      /   \//  .\
                         \  /O  O  \__  /    //  | \ \           *----*
                           /     /  \/_/    //   |  \  \          \   |
                           @___@`    \/_   //    |   \   \         \/\ \
                          0/0/|       \/_ //     |    \    \         \  \
                      0/0/0/0/|        \///      |     \     \       |  |
                   0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
                0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
                            ,-}        _      *-.|.-~-.           .~    ~
           \     \__/        `/\      /                 ~-. _ .-~      /
            \____(oo)           *.   }            {                   /
            (    (--)          .----~-.\        \-`                 .~
            //__\\  \__ Ack!   ///.----..<        \             _ -~
           //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~




P.S. that `$RANDOM` bit looks familiar, where have I seen that before? oh yeah -
it's the only functional part in ["my" Oblique Strategies script][2].

[1]: https://github.com/JKirchartz/dotfiles/blob/master/scripts/cowsay.sh
[2]: https://github.com/JKirchartz/dotfiles/blob/master/scripts/ObliqueStrategies