hoisting the alias definitions up into a function, so we can track them and eventuall...
[feisty_meow.git] / scripts / core / functions.sh
index eee56fe36c4156e3c8bf6c65aa090bdac4aa5efe..535f5ecdaa1c2df8c79aa61ff637f6d5e865bd83 100644 (file)
@@ -105,14 +105,34 @@ if [ -z "$skip_all" ]; then
   }
 
   # 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.
   function psfind() {
     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
     if [ "$OS" == "Windows_NT" ]; then
+
+#hmmm: windows isn't implementing the user flag yet!
+#try collapsing back to the ps implementation from cygwin?
+# that would simplify things a lot, if we can get it to print the right output.
+
       # windows case has some odd gyrations to get the user list.
       if [ ! -d c:/tmp ]; then
         mkdir c:/tmp
@@ -132,21 +152,21 @@ if [ -z "$skip_all" ]; then
       # needs to be a windows format filename for 'type' to work.
       cmd $flag type "$tmppid" >$PID_DUMP
       \rm "$tmppid"
-      local appropriate_pattern='s/^.*[[:space:]][[:space:]]*\([0-9][0-9]*\) *\$/\1/p'
+      local pid_finder_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" \
-          | sed -n -e "$appropriate_pattern"))
+          | sed -n -e "$pid_finder_pattern"))
       done
     else
-      /bin/ps $extra_flags wuax >$PID_DUMP
+      /bin/ps $user_flag -o pid,args >$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]*[[:space:]][[:space:]]*\([0-9][0-9]*\).*$/\1/p'
+      local pid_finder_pattern='s/^[[: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.
@@ -158,7 +178,7 @@ if [ -z "$skip_all" ]; then
         PIDS_SOUGHT+=($(cat $PID_DUMP \
           | sed -e '1d' \
           | grep -i "$i" \
-          | sed -n -e "$appropriate_pattern"))
+          | sed -n -e "$pid_finder_pattern"))
       done
 #echo ====
 #echo pids sought list became:
@@ -181,13 +201,20 @@ if [ -z "$skip_all" ]; then
       echo "psa finds processes by pattern, but there was no pattern on the command line."
       return 1
     fi
-    p=$(psfind "${@}")
+    local -a patterns=("${@}")
+    p=$(psfind "${patterns[@]}")
     if [ -z "$p" ]; then
       # no matches.
       return 0
     fi
+
+    if [ "${patterns[0]}" == "-u" ]; then
+      # void the two elements with that user flag so we don't use them as patterns.
+      unset patterns[0] patterns[1]=
+    fi
+
     echo ""
-    echo "Processes matching ${@}..."
+    echo "Processes matching ${patterns[@]}..."
     echo ""
     if [ -n "$IS_DARWIN" ]; then
       unset fuzil_sentinel
@@ -202,13 +229,11 @@ if [ -z "$skip_all" ]; then
       done
     else 
       # cases besides mac os x's darwin.
-      extra_flags=
-      if [ "$OS" = "Windows_NT" ]; then
+      if [ "$OS" == "Windows_NT" ]; then
         # special case for windows.
-        extra_flags=-W
         ps | head -1
         for curr in $p; do
-          ps $extra_flags | grep "$curr" 
+          ps -W | grep "$curr" 
         done
       else
         # normal OSes can handle a nice simple query.
@@ -463,6 +488,48 @@ if [ -z "$skip_all" ]; then
 
   ##############
 
+# new breed of definer functions goes here.  still in progress.
+
+  # defines an alias and remembers that this is a new or modified definition.
+  # if the feisty meow codebase is unloaded, then so are all the aliases that
+  # were defined.
+  function define_yeti_alias()
+  {
+# if alias exists already, save old value for restore,
+# otherwise save null value for restore,
+# have to handle unaliasing if there was no prior value of one
+# we newly defined.
+# add alias name to a list of feisty defined aliases.
+
+#hmmm: first implem, just do the alias and get that working...
+alias "${@}"
+
+
+return 0
+  }
+
+  # defines a variable within the feisty meow environment and remembers that
+  # this is a new or modified definition.  if the feisty meow codebase is
+  # unloaded, then so are all the variables that were defined.
+  # this function always exports the variables it defines.
+  function define_yeti_variable()
+  {
+# if variable exists already, save old value for restore,
+# otherwise save null value for restore,
+# have to handle unsetting if there was no prior value of one
+# we newly defined.
+# add variable name to a list of feisty defined variables.
+
+#hmmm: first implem just sets it up and exports the variable.
+#  i.e., this method always exports.
+export "${@}" 
+
+
+return 0
+  }
+
+  ##############
+
   function function_sentinel() { return 0; }
   
   if [ ! -z "$SHELL_DEBUG" ]; then echo "feisty meow function definitions done."; fi