Ste*_*172 9 bash shell-script control-flow user-input
对于类,我需要编写一个 Bash 脚本来获取输出ispell,当我尝试在 while 循环中请求用户输入时,它只会将文件的下一行保存为用户输入。
我怎样才能在 while 循环中请求用户输入?
#!/bin/bash
#Returns the misspelled words
#ispell -l < file
#define vars
ISPELL_OUTPUT_FILE="output.tmp";
INPUT_FILE=$1
ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE;
#echo a new line for give space between command
#and the output generated
echo "";
while read line;
do
echo "'$line' is misspelled. Press "Enter" to keep";
read -p "this spelling, or type a correction here: " USER_INPUT;
if [ $USER_INPUT != "" ]
then
echo "INPUT: $USER_INPUT";
fi
echo ""; #echo a new line
done < $ISPELL_OUTPUT_FILE;
rm $ISPELL_OUTPUT_FILE;
Run Code Online (Sandbox Code Playgroud)
你不能在你的while. 您需要使用另一个文件描述符
尝试以下版本:
#!/bin/bash
#Returns the misspelled words
#ispell -l < file
#define vars
ISPELL_OUTPUT_FILE="output.tmp";
INPUT_FILE=$1
ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE;
#echo a new line for give space between command
#and the output generated
echo "";
while read -r -u9 line;
do
echo "'$line' is misspelled. Press "Enter" to keep";
read -p "this spelling, or type a correction here: " USER_INPUT;
if [ "$USER_INPUT" != "" ]
then
echo "INPUT: $USER_INPUT";
fi
echo ""; #echo a new line
done 9< $ISPELL_OUTPUT_FILE;
rm "$ISPELL_OUTPUT_FILE"
Run Code Online (Sandbox Code Playgroud)
笔记
bashis not Cor Perl, 不需要;在每个结束行上放