Hi, i facing a problem when run the script below..
while [ -z "$ea_ident" -o -n "`grep 2>/dev/null \"^EA $ea_ident$\" $EA_run_file`" ]
do
if [ $all_OMC -ne 1 ]
then
printf "Please enter a name : [${omc_ident}] "
read response # the problem occur here
if [ -z "$response" ]
then
ea\_ident=$\{omc_ident\}
else
\#
\# Check that name does not contain invalid characters
\#
ea_ident=\`echo $response | tr -d "/ \\011"\`
if [ -z "$\{ea_ident\}" -o "$\{ea_ident\}" != "$\{response\}" ]
then
echo
echo "Sorry, not a valid name!"
echo "Must not contain spaces, tabs or '/'."
echo
ea_ident=
fi
fi
else
ea\_ident=$\{omc_ident\}
fi
if [ -n "\`grep 2>/dev/null \\"EA $ea_ident$\\" $EA\_run_file\`" ]
then
echo "That name is already in use."
fi
done
$ea_ident is a data , when get into the loop, when excute read command, shell suppose to pause and wait for user input...
But in my case, its not and straight away execute the
next statement -> if [ -z "$response" ] ,
actually in my scritps, i did follow the flow by put echo messages
and it was entered the loop
and execute both printf and read command, but it didnt pause for user input..
do u have any idea,how to solve this problem ... Thanks
That is to avoid the automatic line feed you get at the end of an echo. In other words he wants to read the user input on the same line as the prompt.
neruppu,
Did you try vbe's sh -x suggestion? What exactly happens, does it loop endlessly like this?
$ ./neruppu
Please enter a name : []
Please enter a name : []
Please enter a name : []
Please enter a name : []
Please enter a name : []
Please enter a name : []
Please enter a name : []
...
I reformated your script so that I could actually read it. I defined a couple of variables so I could get it to run. The result....
$ cat mess
#! /usr/bin/ksh
all_OMC=0
EA_run_file=data
while [ -z "$ea_ident" -o -n "`grep 2>/dev/null \"^EA $ea_ident$\" $EA_run_file`" ] ; do
if [ $all_OMC -ne 1 ] ; then
printf "Please enter a name : [${omc_ident}] "
read response # the problem occur here
if [ -z "$response" ] ; then
ea_ident=${omc_ident}
else
#
# Check that name does not contain invalid characters
#
ea_ident=`echo $response | tr -d "/ \011"`
if [ -z "${ea_ident}" -o "${ea_ident}" != "${response}" ] ; then
echo
echo "Sorry, not a valid name!"
echo "Must not contain spaces, tabs or '/'."
echo
ea_ident=
fi
fi
else
ea_ident=${omc_ident}
fi
if [ -n "`grep 2>/dev/null \"EA $ea_ident$\" $EA_run_file`" ] ; then
echo "That name is already in use."
fi
done
$ ./mess
Please enter a name : [] it is pausing for me!
Sorry, not a valid name!
Must not contain spaces, tabs or '/'.
Please enter a name : [] kjhkjhkjhkjh
$
You have posted an excerpt from a script and you assume that the error is in the excerpt that you gave us. This is not true. Your error is elsewhere. You need to supply us with a runable script that reproduces your problem.
>That is to avoid the automatic line feed you get at the end of an echo. In other words he wants to read the user input on the same line as the prompt.