diff --git a/lib/tools.exp b/lib/tools.exp
index e58b208..00da8e7 100755
--- a/lib/tools.exp
+++ b/lib/tools.exp
@@ -207,3 +207,98 @@
   }
 
 }
+
+
+proc shell_command {command_string {prompt_regex} { quiet {} } \
+  { test_mode {} } { show_err {} } { ignore_err {} } {trim_cr_lf 1}} {
+
+  # Execute the command_string on the shell command line and return a list
+  # consisting of 1) the return code of the command 2) the stdout/
+  # stderr.
+
+  # It is the caller's responsibility to spawn the appropriate process
+  # (ssh,telnet) and to get the process to a shell command line
+  # (by logging in, etc.).
+
+  # Description of argument(s):
+  # command_string  The command string which is to be run on the shell (e.g.
+  #                 "hostname" or "grep this that").
+  # prompt_regex    A regular expression to match the prompt for current
+  #                 shell to run on (e.g "/ #").
+  # quiet           Indicates whether this procedure should run the
+  #                 print_issuing() procedure which prints "Issuing:
+  #                 <cmd string>" to stdout. The default value is 0.
+  # test_mode       If test_mode is set, this procedure will not actually run
+  #                 the command.  If print_output is set, it will print
+  #                 "(test_mode) Issuing: <cmd string>" to stdout.  The default
+  #                 value is 0.
+  # show_err        If show_err is set, this procedure will print a
+  #                 standardized error report if the shell command returns non-
+  #                 zero.  The default value is 1.
+  # ignore_err      If ignore_err is set, this procedure will not fail if the
+  #                 shell command fails.  However, if ignore_err is not set,
+  #                 this procedure will exit 1 if the shell command fails.  The
+  #                 default value is 1.
+  # trim_cr_lf      Trim any trailing carriage return or line feed from the
+  #                 result.
+
+  # Set defaults (this section allows users to pass blank values for certain
+  # args)
+  set_var_default quiet [get_stack_var quiet 0 2]
+  set_var_default test_mode 0
+  set_var_default show_err 1
+  set_var_default ignore_err 0
+  set_var_default acceptable_shell_rcs 0
+
+  global spawn_id
+  global expect_out
+
+  qprintn ; qprint_issuing ${command_string} ${test_mode}
+
+  if { $test_mode } {
+    return [list 0 ""]
+  }
+
+  send_wrap "${command_string}"
+
+  set expect_result [expect_wrap\
+    [list "-ex $command_string"]\
+    "the echoed command" 5]
+  set expect_result [expect_wrap\
+    [list {[\n\r]{1,2}}]\
+    "one or two line feeds" 5]
+  # Note the non-greedy specification in the regex below (the "?").
+  set expect_result [expect_wrap\
+    [list "(.*?)$prompt_regex"]\
+    "command output plus prompt" -1]
+  # The command's stdout/stderr should be captured as match #1.
+  set out_buf $expect_out(1,string)
+
+  if { $trim_cr_lf } {
+    set out_buf [ string trimright $out_buf "\r\n" ]
+  }
+
+  # Get rc via recursive call to this function.
+  set rc 0
+  set proc_name [get_stack_proc_name]
+  set calling_proc_name [get_stack_proc_name -2]
+  if { $calling_proc_name != $proc_name } {
+    set sub_result [shell_command {echo ${?}} $prompt_regex 1]
+    dprintn ; dprint_list sub_result
+    set rc [lindex $sub_result 1]
+  }
+
+  if { $rc != 0 } {
+    if { $show_err } {
+      puts stderr "" ; print_error_report "The prior shell command failed.\n"
+    }
+    if { ! $ignore_err } {
+      if { [info procs "exit_proc"] != "" } {
+        exit_proc 1
+      }
+    }
+  }
+
+  return [list $rc $out_buf]
+
+}
\ No newline at end of file
