function whichable()
{
to_find="$1"; shift
- local WHICHER="$(\which which 2>/dev/null)"
+ local WHICHER="$(/usr/bin/which which 2>/dev/null)"
+#>&2 echo "got whicher as: $WHICHER"
if [ $? -ne 0 ]; then
# there is no which command here. we produce nothing due to this.
echo
+ return 2
fi
- echo $($WHICHER $to_find 2>/dev/null)
+ local sporkenz # must be defined local here, before call, or we don't get exit value?!
+ sporkenz=$($WHICHER "$to_find" 2>/dev/null)
+#>&2 echo "broken with this line, but here is exit val: $?"
+ local err=$?
+#>&2 echo "got whicher as: $WHICHER"
+ echo $sporkenz
+ return $err
}
# makes a directory of the name specified and then tries to change the
# 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.
+ # the numbering starts at zero, for the first item at the head of the pipe.
function promote_pipe_return()
{
( exit ${PIPESTATUS[$1]} )
function ssh()
{
local args=($@)
- # 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.
- save_terminal_title
-
-#hmmm: why were we doing this? it scorches the user's logged in session, leaving it without proper terminal handling.
-# # we save the value of TERM; we don't want to leave the user's terminal
-# # brain dead once we come back from this function.
-# local oldterm="$TERM"
-# export TERM=linux
-
- /usr/bin/ssh -Y -C "${args[@]}"
-
-# # restore the terminal variable also.
-# TERM="$oldterm"
+ save_terminal_title # remember the current terminal title.
+ /usr/bin/ssh -C "${args[@]}"
+#hmmm: removed -Y flag because considered dangerous to trust remote hosts to not abuse our X session.
+ restore_terminal_title
+ }
+ # this version of ssh preserves the use of the -Y flag for when X forwarding is needed.
+ function yssh()
+ {
+ local args=($@)
+ save_terminal_title # remember the current terminal title.
+ /usr/bin/ssh -Y "${args[@]}"
restore_terminal_title
- if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
- echo TERM title restored to prior value
- fi
}
##############
# 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
- # processes of that user are considered.
+ #
+ # + the -u flag specifies a user name, e.g. "-u joe", which causes only
+ # the processes of that user "joe" to be considered.
+ #
+ # + the -x flag specifies a pattern to exclude from the list, e.g. "-x pszap.sh"
+ # would ignore any processes that mention the phrase "pszap.sh".
function psfind() {
+ local user_flag="-e"
+ # default user flag is for all users.
+ local excluder="ScrengeflebbitsAPhraseWeNeverExpecttomatchanythingYO298238"
+ # for our default, pick an exclusion string we would never match.
+
+ local found_flag=1
+ while [ $found_flag -eq 1 ]; do
+ # reset our sentinel now that we're safely in our loop.
+ found_flag=0
+
+ # save the first argument, since we're going to shift the args.
+ local arg1="$1"
+ if [ "$arg1" == "-u" ]; then
+ # handle the user flag.
+ user_flag="-u $2"
+#echo "found a -u parm and user=$2"
+ found_flag=1 # signal that we found one.
+ # skip these two arguments, since we've consumed them.
+ shift
+ shift
+ elif [ "$arg1" == "-x" ]; then
+ # handle the exclusion flag.
+ excluder="$2"
+#echo "found a -x parm and excluder=$excluder"
+ found_flag=1 # signal that we found one.
+ # skip these two arguments, since we've consumed them.
+ shift
+ shift
+ fi
+ done
+
+ # now that we've yanked any flags out, we can pull the rest of the
+ # arguments in as patterns to seek in the process list.
local -a patterns=("${@}")
#echo ====
#echo patterns list is: "${patterns[@]}"
#echo ====
- local user_flag
- if [ "${patterns[0]}" == "-u" ]; then
- user_flag="-u ${patterns[1]}"
-#echo "found a -u parm and user=${patterns[1]}"
- # void the two elements with that user flag so we don't use them as patterns.
- unset patterns[0] patterns[1]=
- else
- # select all users.
- user_flag="-e"
- fi
-
local PID_DUMP="$(mktemp "$TMP/zz_pidlist.XXXXXX")"
local -a PIDS_SOUGHT
# ids out of the results.
local i
for i in "${patterns[@]}"; do
+#echo "pattern curr is '$i'"
PIDS_SOUGHT+=($(cat $PID_DUMP \
| grep -i "$i" \
+ | grep -v "$excluder" \
| sed -n -e "$pid_finder_pattern"))
done
#echo ====
# launch sudo with just the variables we want to reach the other side.
local varmods=
-# varmods+="PATH= "
+ varmods+="OLD_HOME=$HOME "
if [ ! -z "$IMPORTED_XAUTH" ]; then varmods+="IMPORTED_XAUTH=$IMPORTED_XAUTH "; fi
- if [ ! -z "$SSH_AUTH_SOCK" ]; then varmods+="SSH_AUTH_SOCK=$SSH_AUTH_SOCK"; fi
+ if [ ! -z "$SSH_AUTH_SOCK" ]; then varmods+="SSH_AUTH_SOCK=$SSH_AUTH_SOCK "; fi
/usr/bin/sudo $varmods "$@"
retval=$?
bash $FEISTY_MEOW_SCRIPTS/core/reconfigure_feisty_meow.sh
echo
# force a full reload by turning off sentinel variables and methods.
- unset -v CORE_VARIABLES_LOADED FEISTY_MEOW_LOADING_DOCK USER_CUSTOMIZATIONS_LOADED
+ unset -v CORE_VARIABLES_LOADED FEISTY_MEOW_LOADING_DOCK USER_CUSTOMIZATIONS_LOADED \
+ BUILD_VARS_LOADED
unalias CORE_ALIASES_LOADED &>/dev/null
unset -f function_sentinel
+
+ # reuse the original path if we can.
+ if [ ! -z "$FEISTY_MEOW_ORIGINAL_PATH" ]; then
+ export PATH="$FEISTY_MEOW_ORIGINAL_PATH"
+ fi
+
# reload feisty meow environment in current shell.
log_feisty_meow_event "reloading the feisty meow scripts for $USER in current shell."
source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh"
{
count=$1; shift
if [ -z "$count" ]; then
- count=79
+ count=$(($COLUMNS - 1))
fi
echo
local i
- for ((i=0; i < $count - 1; i++)); do
+ for ((i=0; i < $count; i++)); do
echo -n "="
done
echo
##############
# space 'em all: fixes naming for all of the files of the appropriate types
- # in the directories specified.
+ # in the directories specified. we skip any file with a dot in front, to
+ # respect their hidden nature. currently the set of files we'll rename is
+ # very boutique; it's in this function, and just happens to be the types of
+ # files we work with a lot.
function spacemall() {
local -a dirs=("${@}")
if [ ${#dirs[@]} -eq 0 ]; then
fi
local charnfile="$(mktemp $TMP/zz_charn.XXXXXX)"
- find "${dirs[@]}" -follow -maxdepth 1 -mindepth 1 -type f | \
+#hmmm: any way to do the below more nicely or reusably?
+#hmmm: yes! a variable with a list of files that are considered TEXT_FILE_EXTENSIONS or something like that.
+#hmmm: yes continued! also a variable for BINARY_FILE_EXTENSIONS to avoid those, where we need to in other scripts.
+#hmmm: wait, we actually have a mix here, since this is a renaming function and not a searching function; get it straight!
+#hmmm: would the composition of those two types of extensions cover all the files i want to rename? they have to be "important".
+ find "${dirs[@]}" -follow -maxdepth 1 -mindepth 1 -type f -and -not -iname ".[a-zA-Z0-9]*" | \
grep -i \
-"doc\|docx\|eml\|html\|jpeg\|jpg\|m4a\|mov\|mp3\|ods\|odt\|pdf\|png\|ppt\|pptx\|txt\|vsd\|vsdx\|xls\|xlsx\|zip" | \
+"csv\|doc\|docx\|eml\|html\|ics\|jpeg\|jpg\|m4a\|mov\|mp3\|odp\|ods\|odt\|pdf\|png\|ppt\|pptx\|rtf\|txt\|vsd\|vsdx\|wav\|xls\|xlsx\|xml\|zip" | \
sed -e 's/^/"/' | sed -e 's/$/"/' | \
xargs bash "$FEISTY_MEOW_SCRIPTS/files/spacem.sh"
# drop the temp file now that we're done.