O segundo read
dentro do corpo do loop está incorreto aqui. Na verdade, vai uma linha à frente da sua primeira chamada read
como parte do loop while. Então, para sua exigência, leia essas variáveis como parte do primeiro read
while read -r path1 path2; do
echo "$path1"
echo "$path2"
done < "$1"
Como você vê aqui, a configuração IFS=
também está incorreta, ao ler duas variáveis, porque a redefinição do separador de campo apenas pega a linha como um todo. Por ter seu valor padrão (caracteres de espaço em branco, tabulação e nova linha), a leitura de duas variáveis armazenará os valores de cada linha em uma lista separada por espaços. Dessa forma, poderíamos ter uma linha delimitada por n colunas e usar n variáveis para ler.
Agora os valores estão disponíveis nessas variáveis que você poderia passar para outros comandos conforme necessário.
Vamos ver como isso funciona para um arquivo de entrada de amostra
foo bar
foo1 bar1
foo2 bar2
Executando o primeiro script no modo de depuração com -x
set
$ bash -x script.sh
+ read -r path1 path2
+ echo 1
1
+ echo 2
2
+ read -r path1 path2
+ echo 3
3
+ echo 4
4
+ read -r path1 path2
+ echo abc
abc
+ echo def
def
+ read -r path1 path2