Você pode usar read
com -n 1
para ler caractere por caractere e criar a string que você leu à medida que avança. Então você pode decidir o que fazer com cada caractere:
val=""
while read -n 1 char; do
if [[ $char = "" ]]; then
printf 'Got an enter and the string is %s' "$val"
# do whatever else you want with it here
val="" # reset it to get the next param
else
val="$val$char" # append input
fi
if [[ $val = "halt" ]]; then
exit
fi
done