Ok, usando PS1
e command_not_found_handle
, é possível insultar você:
anthony@Watt:~$ . /tmp/insult.sh
anthony@Watt:~$ sl
bash: sl: command not found, incompetent spoony bard
anthony@Watt:~$ ls /wrong/path
ls: cannot access /wrong/path: No such file or directory
Learn to type, second-rate Horrified Heron.
anthony@Watt:~$
E aqui está o /tmp/insult.sh
que eu inventei acima.
### Data ###
bash_insulter_sentences=(
'Have you considered Windows, %s?\n'
'Learn to type, %s.\n'
'Fell asleep at the keyboard again, %s?\n'
"Failure is common when you're a %s, isn't it?\n"
)
bash_insulter_subjects=(
'spoony bard' # we all played this, right?
'extra-Warty Warthog'
'Dazed Drake'
'Fidgety Fawn'
'Horrified Heron' # etc.
)
bash_insulter_adjectives=(
'incompetent ' # these have built-in spacing
'inept '
'second-rate '
'' # chance of none
''
)
### Functions to generate insults ###
bash_insulter_random_element() {
if [ ${BASH_VERSINFO[0]} -lt 4 ] || \
[ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -lt 3 ]; then
# bash before 4.3 doesn't have -n
eval "local var=(\"\${$1[@]}\")"
else
local -n var="$1"
fi
local len=${#var[@]}
echo -n "${var[$RANDOM % len]}" # Slightly biased. Don't care.
}
bash_insulter_full_subject() {
bash_insulter_random_element bash_insulter_adjectives
bash_insulter_random_element bash_insulter_subjects
}
bash_insulter_do_insult() {
printf "$(bash_insulter_random_element bash_insulter_sentences)" "$(bash_insulter_full_subject)"
}
### set up ###
command_not_found_handle() {
echo "bash: $1: command not found, $(bash_insulter_full_subject)"
return 127
}
PS1=''
if [ 0 -ne $? -a 127 -ne $? ]; then
bash_insulter_do_insult
fi
echo "\u@\h:\w\$ ";
''