# checks the result of the last command that was run, and if that failed,
# then this complains and exits from bash. the function parameters are
# used as the message to print as a complaint.
- function check_result()
+ function test_or_die()
{
if [ $? -ne 0 ]; then
- echo -e "failed on: $*"
+ echo -e "\n\naction failed: $*\n\nExiting script..."
error_sound
exit 1
fi
}
+ # like test_or_die, but will keep going after complaining.
+ function test_or_continue()
+ {
+ if [ $? -ne 0 ]; then
+ echo -e "\n\nerror occurred: $*\n\nContinuing script..."
+ error_sound
+ fi
+ }
+
+ # wraps secure shell with some parameters we like, most importantly to enable X forwarding.
+ function ssh()
+ {
+ local args=($*)
+ save_terminal_title
+ # we remember the old terminal title, then force the TERM variable to a more generic
+ # version for the other side (just 'linux'); we don't want the remote side still
+ # thinking it's running xterm.
+ export TERM=linux
+ /usr/bin/ssh -X -C "${args[@]}"
+ restore_terminal_title
+ }
+
# locates a process given a search pattern to match in the process list.
# supports a single command line flag style parameter of "-u USERNAME";
# if the -u flag is found, a username is expected afterwards, and only the
echo "The nechung oracle program cannot be found. You may want to consider"
echo "rebuilding the feisty meow applications with this command:"
echo "bash $FEISTY_MEOW_SCRIPTS/generator/produce_feisty_meow.sh"
+ echo
else
$wheres_nechung
fi
regenerate >/dev/null
pushd "$FEISTY_MEOW_LOADING_DOCK/custom" &>/dev/null
incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom")"
+
+ local fail_message="\nare the perl dependencies installed? if you're on ubuntu or debian, try this:\n
+ $(grep "apt.*perl" $FEISTY_MEOW_APEX/readme.txt)\n"
#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..."
perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" $incongruous_files
+ test_or_continue "running safedel. $fail_message"
echo
fi
popd &>/dev/null
echo "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"
+ test_or_continue "running cpdiff. $fail_message"
+
if [ -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" ]; then
echo "copying custom scripts for $custom_user"
- \cp -R "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/"
+ netcp "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" &>/dev/null
+#hmmm: could save output to show if an error occurs.
fi
echo
regenerate
if [ -d "$src" ]; then
ln -s "$src" "$target"
- check_result "Creating symlink from '$src' to '$target'"
+ test_or_die "Creating symlink from '$src' to '$target'"
fi
echo "Created symlink from '$src' to '$target'."
}
+ # pretty prints the json files provided as parameters.
+ function clean_json()
+ {
+ if [ -z "$*" ]; then return; fi
+ local show_list=()
+ while true; do
+ local file="$1"; shift
+ if [ -z "$file" ]; then break; fi
+ if [ ! -f "$file" ]; then "echo File '$file' does not exist."; continue; fi
+ temp_out="$TMP/$file.view"
+ cat "$file" | python -m json.tool > "$temp_out"
+ show_list+=($temp_out)
+ test_or_continue "pretty printing '$file'"
+ done
+ filedump "${show_list[@]}"
+ rm "${show_list[@]}"
+ }
+
+ function json_text()
+ {
+ # only print our special headers or text fields.
+ local CR=$'\r'
+ local LF=$'\n'
+ clean_json $* |
+ grep -i "\"text\":\|^=.*" |
+ sed -e "s/\\\\r/$CR/g" -e "s/\\\\n/\\$LF/g"
+ }
+
+ ##############
+
+ # echoes the machine's hostname. can be used like so:
+ # local my_host=$(get_hostname)
+ function get_hostname()
+ {
+ # there used to be more variation in how to do this, but adopting mingw
+ # and cygwin tools really helped out.
+ local this_host=unknown
+ if [ "$OS" == "Windows_NT" ]; then
+ this_host=$(hostname)
+ elif [ ! -z "$(echo $MACHTYPE | grep apple)" ]; then
+ this_host=$(hostname)
+ elif [ ! -z "$(echo $MACHTYPE | grep suse)" ]; then
+ this_host=$(hostname --long)
+ elif [ -x "$(which hostname 2>/dev/null)" ]; then
+ this_host=$(hostname)
+ fi
+ echo "$this_host"
+ }
+
+ # makes sure that the provided "folder" is a directory and is writable.
+ function test_writeable()
+ {
+ local folder="$1"; shift
+ if [ ! -d "$folder" -o ! -w "$folder" ]; then return 1; fi
+ return 0
+ }
+
##############
# NOTE: no more function definitions are allowed after this point.
echo running tests on set_var_if_undefined.
flagrant=petunia
set_var_if_undefined flagrant forknordle
- check_result "testing if defined variable would be whacked"
+ test_or_die "testing if defined variable would be whacked"
if [ $flagrant != petunia ]; then
echo set_var_if_undefined failed to leave the test variable alone
exit 1