diff options
-rwxr-xr-x | ponysay | 24 |
1 files changed, 19 insertions, 5 deletions
@@ -17,7 +17,9 @@ usage() { version echo echo "Usage:" - echo "${0##*/} [options]" + echo "${0##*/} [options] [message]" + echo + echo "If [message] is not provided, reads the message from STDIN" echo echo "Options:" echo " -v Show version and exit" @@ -26,6 +28,10 @@ usage() { echo " -W[column] The screen column where the message should be wrapped" } +say() { + exec "$cmd" -f "$pony" "${wrap:+-W$wrap}" +} + while getopts f:W:hv OPT do case ${OPT} in @@ -36,23 +42,31 @@ do \?) usage >&2; exit 1 ;; esac done +shift $((OPTIND - 1)) -# Pony not a file? Search for it if [[ ! -f $pony ]]; then + # Pony not a file? Search for it + ponies=() [[ -d $SYSTEMPONIES ]] && ponies+=( "$SYSTEMPONIES"/$pony.pony ) [[ -d $HOMEPONIES ]] && ponies+=( "$HOMEPONIES"/$pony.pony ) if (( ${#ponies} < 1 )); then - echo >&2 "All the ponies are missing! Call the Princess!" - exit 1 + echo >&2 "All the ponies are missing! Call the Princess!" + exit 1 fi # Choose a random pony pony="${ponies[$RANDOM%${#ponies[@]}]}" fi + # Ponies use UTF-8 drawing characters. Prevent a Perl warning. export PERL_UNICODE=S -exec "$cmd" -f "$pony" "${wrap:+-W$wrap}" +if [[ -n "$*" ]]; then + # Handle a message given via arguments + say <<<"$*" +else + say +fi |