Saturday, October 29, 2022

[SOLVED] While loop with function that asks for user input

Issue

I got this function:

#!/bin/bash
prompt() {
read -r -p "${1:-Usunąć podany plik? [t/N]} " response
case "$response" in
    [tT][eE][sS]|[tT])
        true
        echo "Usuwam... $line"
        ;;
        *)
        false
        echo "Pomijam... $line"
        ;;
esac
}

And I want it to work inside a loop that reads line by line from a .txt file:

while IFS= read -r line
        do
            echo "$line" && prompt
        done < lista.txt

As I run the script here's the output (it doesn't actually prompt for user input):

11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI2.pdf
Pomijam... 11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI2.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI4.pdf
Pomijam... 11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI4.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI6.pdf
Pomijam... 11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI6.pdf

The lista.txt file looks like that if I use this loop:

while IFS= read -r line
        do
            echo "$line"
        done < lista.txt

Output:

11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI2.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI3.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI4.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI5.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI6.pdf
11M /home/kamil/TEST/FOLDER ZE SPACJAMI/PLIK ZE SPACJAMI.pdf

My desire is that it prompts a user input as it reads every line.


Solution

The line you need to change is :

read -r -p "${1:-Usunąć podany plik? [t/N]} " response < /dev/tty


Answered By - Philippe
Answer Checked By - Gilberto Lyons (WPSolving Admin)