On Sun, Feb 09, 2025 at 02:48:42 +1100, carlyle_moul...@optusnet.com.au wrote: > I have a script to go through file names in the current directory, > check whether they contain blanks and optionally replace blanks with > underscores.
for f in *[[:space:]]*; do read -r -p "Fix <$f>? " yn if [[ $yn = [Yy]* ]]; then mv -- "$f" "${f//[[:space:]]/_}" fi done With that said, now let's find your original issue: > The first step in the main program is:- > ls -l >/tmp/$USER/tempfile1 > Then follows a while read REPLY; do # loop to read records from > /tmp/$USER/tempfile1 > # The first record is discarded, from the remainder the File_Name is > extracted and passed to a functionas a quoted string to function > File_Contains_Blanks "$File_Name" > # Global variable GRV_File_Contains_Blanks returns true if there is at > least one blank > # Function Get_Reply is called to get a Y or N answer preceded by a > prompt using the read command OK, I think you have something like this: while read -r f; do if [[ $f = *[[:space:]]* ]]; then read -r -p "Fix <$f>? " yn fi ... done < mylistfile Is that close enough? The problem here is that you're trying to use standard input for two different things at the same time: you've redirected it from mylistfile, and you're also using it to read a response from the user's terminal. The version that I wrote (for f in ...) will avoid this problem by not redirecting stdin. But if you need to do something like this in the future, you can use a different file descriptor for the redirection: while read -r -u3 f; do ... read -r -p "Do it? " yn ... done 3< somefile This way, stdin is used only for the read command, and not also for the input file redirection.