cd "$1"
}
+ function is_array() {
+ [[ "$(declare -p $1)" =~ "declare -a" ]]
+ }
+
+ function is_alias() {
+ alias $1 &>/dev/null
+ return $?
+ }
+
# displays the value of a variable in bash friendly format.
function var() {
+ HOLDIFS="$IFS"
+ IFS=""
while true; do
local varname="$1"; shift
if [ -z "$varname" ]; then
break
fi
- if [ -z "${!varname}" ]; then
+
+ if is_alias "$varname"; then
+#echo found $varname is alias
+ local tmpfile="$(mktemp $TMP/aliasout.XXXXXX)"
+ alias $varname | sed -e 's/.*=//' >$tmpfile
+ echo "alias $varname=$(cat $tmpfile)"
+ \rm $tmpfile
+ elif [ -z "${!varname}" ]; then
echo "$varname undefined"
else
- echo "$varname=${!varname}"
+ if is_array "$varname"; then
+#echo found $varname is array var
+ local temparray
+ eval temparray="(\${$varname[@]})"
+ echo "$varname=(${temparray[@]})"
+#hmmm: would be nice to print above with elements enclosed in quotes, so that we can properly
+# see ones that have spaces in them.
+ else
+#echo found $varname is simple
+ echo "$varname=${!varname}"
+ fi
fi
done
+ IFS="$HOLDIFS"
}
function success_sound()
# locates a process given a search pattern to match in the process list.
function psfind() {
local -a patterns=("${@}")
+#echo ====
+#echo patterns list is: "${patterns[@]}"
+#echo ====
local PID_DUMP="$(mktemp "$TMP/zz_pidlist.XXXXXX")"
local -a PIDS_SOUGHT
if [ "$OS" == "Windows_NT" ]; then
- # needs to be a windows format filename for 'type' to work.
+ # windows case has some odd gyrations to get the user list.
if [ ! -d c:/tmp ]; then
mkdir c:/tmp
fi
flag='//c'
fi
# we 'type' the file to get rid of the unicode result from wmic.
+ # needs to be a windows format filename for 'type' to work.
cmd $flag type "$tmppid" >$PID_DUMP
\rm "$tmppid"
- local appropriate_pattern="s/^.* *\([0-9][0-9]*\) *\$/\1/p"
+ local appropriate_pattern='s/^.*[[:space:]][[:space:]]*\([0-9][0-9]*\) *\$/\1/p'
+ local i
for i in "${patterns[@]}"; do
PIDS_SOUGHT+=($(cat $PID_DUMP \
| grep -i "$i" \
done
else
/bin/ps $extra_flags wuax >$PID_DUMP
+#echo ====
+#echo got all this stuff in the pid dump file:
+#cat $PID_DUMP
+#echo ====
# pattern to use for peeling off the process numbers.
- local appropriate_pattern='s/^[-a-zA-Z_0-9][-a-zA-Z_0-9]* *\([0-9][0-9]*\).*$/\1/p'
+ local appropriate_pattern='s/^[-+a-zA-Z_0-9][-+a-zA-Z_0-9]*[[:space:]][[:space:]]*\([0-9][0-9]*\).*$/\1/p'
# remove the first line of the file, search for the pattern the
# user wants to find, and just pluck the process ids out of the
# results.
+ local i
for i in "${patterns[@]}"; do
+#echo pattern is $i
+#echo phase 1: $(cat $PID_DUMP | sed -e '1d' )
+#echo phase 2: $(cat $PID_DUMP | sed -e '1d' | grep -i "$i" )
PIDS_SOUGHT+=($(cat $PID_DUMP \
| sed -e '1d' \
| grep -i "$i" \
| sed -n -e "$appropriate_pattern"))
done
+#echo ====
+#echo pids sought list became:
+#echo "${PIDS_SOUGHT[@]}"
+#echo ====
fi
if [ ${#PIDS_SOUGHT[*]} -ne 0 ]; then
local PIDS_SOUGHT2=$(printf -- '%s\n' ${PIDS_SOUGHT[@]} | sort | uniq)
function spacem()
{
-#hmmm: could really use that pattern of 'iterate across all the arguments and do same thing' here.
-
-#hmmm: it actually seems like the below IS the pattern. it's pretty short, but i wish it could be shorter, like a function in itself.... ah.
-# couldn't we have a functionator deal that takes:
-# 1) a command to run, and
-# 2-n) arguments,
-# where the function just blithely runs that command on all of those arguments!?
-# yes! that does seem like the pattern being sought, much nicer than the goofy loop below,
-# although this functionator deal needs to handle when there are more than one command also,
-# or this very function couldn't be implemented...
-# maybe a two step process:
-# 1) build a list of commands to run on all arguments,
-# 2) then run through all the arguments passed in using those established commands.
-# yes again! this seems like it would meet all the needs involved and not be too irksome.
-# for the example below, this would reduce the number of lines, i think.
-# i had better stop bloviating and write this function so i can determine the number of
-# lines omitted by the new approach.
while [ $# -gt 0 ]; do
arg="$1"; shift
+ if [ ! -f "$arg" -a ! -d "$arg" ]; then
+ echo "failure to find a file or directory named '$arg'."
+ continue
+ fi
# first we rename the file to be lower case.
perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$arg" &>/dev/null
# oops, now the name is all lower-case. we need to make the
# the output of the replace operaton for reporting.
final_name="$(perl "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg2")"
# now zap the intermediate part of the name off.
- final_name="$(echo \"$final_name\" | sed -e 's/.*=> //')"
+ final_name="$(echo $final_name | sed -e 's/.*=> //')"
# printout the combined operation results.
echo "'$arg' => $final_name"
done
-#
}
##############