O que você escreveu não é um programa que lê entrada de um arquivo, mas um programa que recebe sua entrada na forma de parâmetros posicionais (também conhecidos como argumentos de linha de comando). O operador de redirecionamento <
envia seus dados de arquivo para o fluxo de entrada padrão do programa (também conhecido como stdin
) - que seu programa ignora.
Na sua forma mais simples, para ler uma linha por valor da entrada padrão, você pode alterar seu programa para
#!/bin/bash
read a
read b
num=$((a+b))
echo $num
Agora, quando você redirecionar stdin
do seu arquivo de teste, o resultado deve ser
$ ./newprog < test1.in
2
Como alternativa, você poderia ter usado o utilitário xargs
para ler os dados do arquivo e passar seu conteúdo para o programa como argumentos
$ xargs -a test1.in ./prog
2