Search for ponies more intelligently

This commit is contained in:
Jan Alexander Steffens (heftig) 2012-02-26 19:52:17 +01:00
parent c840fc6976
commit 729ac65c7f

51
ponysay
View file

@ -1,37 +1,44 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Ponies use UTF-8 drawing characters. Prevent a Perl warning.
export PERL_UNICODE=S export PERL_UNICODE=S
[[ -z ${PONYDIR} ]] && PONYDIR=/usr/share/ponies SYSTEMPONIES=/usr/share/ponies
HOMEDIR=${HOME}/.ponies HOMEPONIES="${HOME}/.ponies"
cmd=cowsay cmd=cowsay
[[ ${0} == *ponythink ]] && cmd=cowthink [[ ${0} == *ponythink ]] && cmd=cowthink
function ponyf() { pony=
if [[ -f ${HOMEDIR}/${1}.pony ]]; then
${cmd} -f "${HOMEDIR}/${1}.pony" $@
elif [[ -f ${PONYDIR}/${1}.pony ]]; then
${cmd} -f "${PONYDIR}/${1}.pony" $@
else
ponyr $@
fi
}
function ponyr() {
if [[ -d ${HOMEDIR} ]] && [[ -n $(find ${HOMEDIR} -name \*.pony) ]]; then
${cmd} -f $(ls ${HOMEDIR}/*.pony | sort -R | head -n1) $@
elif [[ -d ${PONYDIR} ]] && [[ -n $(find ${PONYDIR} -name \*.pony) ]]; then
${cmd} -f $(ls ${PONYDIR}/*.pony | sort -R | head -n1) $@
fi
}
while getopts f:hv OPT while getopts f:hv OPT
do do
case ${OPT} in case ${OPT} in
v) echo "ponysay v0.2" ; exit;; v) echo "ponysay v0.4" ; exit;;
h) echo "-v for version, -h for this, -f to specify a ponyfile. It'll choose a random ponyfile if no argument is given." ; exit;; h) echo "-v for version, -h for this, -f to specify a ponyfile. It'll choose a random ponyfile if no argument is given." ; exit;;
f) ponyf $* ; exit;; f) pony=$OPTARG ;;
\?) echo "DERP"; exit;; \?) echo "DERP"; exit;;
*) ponyr $* ; exit;;
esac esac
done done
ponyr $*
# Pony not a file? Search for it
if [[ ! -f $pony ]]; then
# Pony not set? Choose all
[[ -z $pony ]] && pony="*"
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
fi
# Choose a random pony
pony="${ponies[$RANDOM%${#ponies[@]}]}"
fi
exec "$cmd" -f "$pony"