cd "$1"
}
+ # returns true if the variable is an array.
function is_array() {
[[ "$(declare -p $1)" =~ "declare -a" ]]
}
+ # returns true if the name provided is a defined alias.
function is_alias() {
alias $1 &>/dev/null
return $?
}
+ # makes the status of pipe number N (passed as first parameter) into the
+ # main return value (i.e., the value for $?). this is super handy to avoid
+ # repeating the awkward looking code below in multiple places.
+ function promote_pipe_return()
+ {
+ ( exit ${PIPESTATUS[$1]} )
+ }
+
##############
# displays the value of a variable in bash friendly format.
function exit_on_error()
{
if [ $? -ne 0 ]; then
- echo -e "\n\naction failed: $*\n\n*** Exiting script..."
+ echo -e "\n\nan important action failed and this script will stop:\n\n$*\n\n*** Exiting script..."
error_sound
exit 1
fi
function continue_on_error()
{
if [ $? -ne 0 ]; then
- echo -e "\n\nerror occurred: $*\n\n=> Continuing script..."
+ echo -e "\n\na problem occurred, but we can continue:\n\n$*\n\n=> Continuing script..."
error_sound
fi
}
##############
+ # accepts any number of arguments and outputs them to the feisty meow event log.
+ function log_feisty_meow_event()
+ {
+ echo -e "$(date_stringer) -- ${USER}@$(hostname): $*" >> "$FEISTY_MEOW_EVENT_LOG"
+ }
+
+ ##############
+
# wraps secure shell with some parameters we like, most importantly to enable X forwarding.
function ssh()
{
unalias CORE_ALIASES_LOADED &>/dev/null
unset -f function_sentinel
# reload feisty meow environment in current shell.
- echo "reloading the feisty meow scripts."
- echo
+ log_feisty_meow_event "reloading the feisty meow scripts for $USER in current shell."
source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
# run nechung oracle to give user a new fortune.
nechung
{
local custom_user="$1"; shift
if [ -z "$custom_user" ]; then
- # use our default example user if there was no name provided.
- custom_user=$(logname)
+ # default to login name if there was no name provided.
+ custom_user="$(logname)"
+ # we do intend to use logname here to get the login name and to ignore
+ # if the user has sudo root access; we don't want to provide a custom
+ # profile for root.
fi
save_terminal_title
if [ ! -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" ]; then
- echo "The customization folder for '$custom_user' would be:"
- echo " $FEISTY_MEOW_SCRIPTS/customize/$custom_user"
- echo "but that folder does not exist. Skipping recustomization."
+ echo -e "the customization folder for '$custom_user' is missing:
+
+ $FEISTY_MEOW_SCRIPTS/customize/$custom_user
+
+we will skip recustomization, but these other customizations are available:
+"
+ # a little tr and sed magic to fix the carriage returns into commas.
+ local line="$(find $FEISTY_MEOW_SCRIPTS/customize -mindepth 1 -maxdepth 1 -type d -exec basename {} ';' | tr '\n' '&' | sed 's/&/, /g' | sed -e 's/, $//')"
+ # make the line feeds and carriage returns manageable with tr.
+ # convert the ampersand, our weird replacement for EOL, with a comma + space in sed.
+ # last touch with sed removes the last comma.
+ echo " $line"
return 1
fi
# prevent permission foul-ups.
-#hmmm: save error output here instead of muting it.
-#hmmm: better yet actually, just don't complain on freaking cygwin, since that's where this happens
- chown -R "$(logname):$(logname)" \
+ my_user="$USER"
+ # here we definitely want the effective user name (in USER), since
+ # we don't want, say, fred (as logname) to own all of root's loading
+ # dock stuff.
+ chown -R "$my_user:$my_user" \
"$FEISTY_MEOW_LOADING_DOCK"/* "$FEISTY_MEOW_GENERATED_STORE"/* 2>/dev/null
- continue_on_error "chowning to $(logname) didn't happen."
+ continue_on_error "chowning feisty meow generated directories to $my_user"
regenerate >/dev/null
pushd "$FEISTY_MEOW_LOADING_DOCK/custom" &>/dev/null
#echo "the incongruous files list is: $incongruous_files"
# disallow a single character result, since we get "*" as result when nothing exists yet.
if [ ${#incongruous_files} -ge 2 ]; then
- echo "cleaning unknown older overrides..."
+ log_feisty_meow_event "cleaning unknown older overrides..."
perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" $incongruous_files
continue_on_error "running safedel. $fail_message"
- echo
fi
popd &>/dev/null
- echo "copying custom overrides for $custom_user"
+ log_feisty_meow_event "copying custom overrides for $custom_user"
mkdir -p "$FEISTY_MEOW_LOADING_DOCK/custom" 2>/dev/null
perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom"
continue_on_error "running cpdiff. $fail_message"
if [ -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" ]; then
- echo "copying custom scripts for $custom_user"
+ log_feisty_meow_event "copying custom scripts for $custom_user"
+#hmmm: could save output to show if an error occurs.
rsync -avz "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" &>/dev/null
continue_on_error "copying customization scripts"
-#hmmm: could save output to show if an error occurs.
fi
- echo
regenerate
# prevent permission foul-ups, again.
- chown -R "$(logname):$(logname)" \
+ chown -R "$my_user:$my_user" \
"$FEISTY_MEOW_LOADING_DOCK" "$FEISTY_MEOW_GENERATED_STORE" 2>/dev/null
- continue_on_error "chowning to $(logname) didn't happen."
+ continue_on_error "once more chowning feisty meow generated directories to $my_user"
restore_terminal_title
}
echo $(which $to_find)
}
-#hmmm: improve this by not adding the link
-# if already there, or if the drive is not valid.
function add_cygwin_drive_mounts() {
for i in c d e f g h q z ; do
+#hmmm: improve this by not adding the link if already there, or if the drive is not valid.
ln -s /cygdrive/$i $i
done
}