133 lines
2.7 KiB
Bash
Executable File
133 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
usage() {
|
|
echo
|
|
echo " Description: Pokemonsay makes a pokémon say something to you."
|
|
echo
|
|
echo " Usage: $(basename $0) [-p POKEMON_NAME] [-f COW_FILE] [-w COLUMN] [-l] [-n] [-t] [-h] [MESSAGE]"
|
|
echo
|
|
echo " Options:"
|
|
echo " -p, --pokemon POKEMON_NAME"
|
|
echo " Choose what pokemon will be used by its name."
|
|
echo " -f, --file COW_FILE"
|
|
echo " Specify which .cow file should be used."
|
|
echo " -w, --word-wrap COLUMN"
|
|
echo " Specify roughly where messages should be wrapped."
|
|
echo " -l, --list"
|
|
echo " List all the pokémon available."
|
|
echo " -n, --no-name"
|
|
echo " Do not tell the pokémon name."
|
|
echo " -t, --think"
|
|
echo " Make the pokémon think the message, instead of saying it."
|
|
echo " -h, --help"
|
|
echo " Display this usage message."
|
|
echo " MESSAGE"
|
|
echo " What the pokemon will say. If you don't provide a message, a message will be read form standard input."
|
|
exit 0
|
|
}
|
|
|
|
# Where the pokemon are.
|
|
pokemon_path=`pwd`/cows
|
|
|
|
list_pokemon() {
|
|
echo "Pokémon available in '$pokemon_path/':"
|
|
echo
|
|
all_pokemon="$(find $pokemon_path -name "*.cow" | sort)"
|
|
echo "$all_pokemon" | while read pokemon; do
|
|
pokemon=${pokemon##*/}
|
|
pokemon=${pokemon%.cow}
|
|
echo $pokemon
|
|
done
|
|
exit 0
|
|
}
|
|
|
|
# While there are arguments, keep reading them.
|
|
while [ $# -gt 0 ]
|
|
do
|
|
key="$1"
|
|
case $key in
|
|
-p|--pokemon)
|
|
POKEMON_NAME="$2"
|
|
shift; shift
|
|
;;
|
|
-p=*|--pokemon=*)
|
|
POKEMON_NAME="${1#*=}"
|
|
shift
|
|
;;
|
|
-f|--file)
|
|
COW_FILE="$2"
|
|
shift; shift
|
|
;;
|
|
-f=*|--file=*)
|
|
COW_FILE="${1#*=}"
|
|
shift
|
|
;;
|
|
-w|--word-wrap)
|
|
WORD_WRAP="$2"
|
|
shift; shift
|
|
;;
|
|
-w=*|--word-wrap=*)
|
|
WORD_WRAP="${1#*=}"
|
|
shift
|
|
;;
|
|
-l|--list)
|
|
list_pokemon
|
|
;;
|
|
-n|--no-name)
|
|
DISPLAY_NAME="NO"
|
|
shift
|
|
;;
|
|
-t|--think)
|
|
THINK="YES"
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
;;
|
|
-*)
|
|
echo
|
|
echo " Unknown option '$1'"
|
|
usage
|
|
;;
|
|
*)
|
|
# Append this word to the message.
|
|
if [ -n "$MESSAGE" ]; then
|
|
MESSAGE="$MESSAGE $1"
|
|
else
|
|
MESSAGE="$1"
|
|
fi
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Define where to wrap the message.
|
|
if [ -n "$WORD_WRAP" ]; then
|
|
word_wrap="-W $WORD_WRAP"
|
|
fi
|
|
|
|
# Define which pokemon should be displayed.
|
|
if [ -n "$POKEMON_NAME" ]; then
|
|
pokemon_cow=$(find $pokemon_path -name "$POKEMON_NAME.cow")
|
|
elif [ -n "$COW_FILE" ]; then
|
|
pokemon_cow="$COW_FILE"
|
|
else
|
|
pokemon_cow=$(find $pokemon_path -name "*.cow" | shuf -n1)
|
|
fi
|
|
|
|
# Get the pokemon name.
|
|
filename=$(basename "$pokemon_cow")
|
|
pokemon_name="${filename%.*}"
|
|
|
|
# Call cowsay or cowthink.
|
|
if [ -n "$THINK" ]; then
|
|
cowthink -f "$pokemon_cow" $word_wrap $MESSAGE
|
|
else
|
|
cowsay -f "$pokemon_cow" $word_wrap $MESSAGE
|
|
fi
|
|
|
|
# Write the pokemon name, unless requested otherwise.
|
|
if [ -z "$DISPLAY_NAME" ]; then
|
|
echo $pokemon_name
|
|
fi
|