title: shell function to prompt for and return input
body: <p>I'm trying to write a helper function to use in a bash script to take a variable prompt string and return the value the user inputs.  What I have sits and waits for a user to input the value without displaying the prompt first, which is puzzling.  It also stores the echo in the return value ($foo), and doesn't keep the value read in with the pid variable.</p>
  
  <pre><code>!#/bin/bash
  pid=0
  promptValue() {
    msg="$1"
    echo -e "$msg"
    read val
    pid=$val
  }
  
  foo=$(promptValue "type something")
  </code></pre>
  
  <p><strong>EDIT:</strong>
  For anyone who might want to use this in the future for their own use, this is the full (functional) script, which is designed to send an email (in this case to my cellphone) to let me know when a long running process completes.  I'm sure there has to be a better way to do this, but meh. :-)  (I wrote them like this to be used in a bash function library elsewhere.)</p>
  
  <pre><code>#!/bin/bash
  
  promptValue() {
   read -p "$1"": " val
   echo $val
  }
  
  alertme() {
   if [ -z "$email" ]; then
     email=$(promptValue "Enter email")
   fi
  
   if [ -z "$email" ]; then 
     echo "ERROR: No email set!"
     exit 1
   fi
  
   if [ -z "$pid" ]; then
     pid=$(promptValue "Enter pid")
   fi
  
   if [ -z "$pid" ]; then 
     echo "ERROR: No pid set!"
     exit 1
   fi
  
   ps -ef | grep $pid | grep -v grep &gt; /dev/null 2&gt;&amp;1
   while [ $? eq 0 ]; do
    sleep 10
    ps -ef | grep $pid | grep -v grep &gt; /dev/null 2&gt;&amp;1
   done
  
   echo "Process Complete" | mailx -s "Process Complete" $email
  }
  
  alertme
  </code></pre>
  
  <p>Thanks again everyone!</p>