Se você precisar avaliar apenas todas as linhas de um arquivo, não será necessário um redirecionamento eval ou stdout complicado. Duas opções fáceis:
- Origem do arquivo (
source filename.shou. filename.sh). - Torne o arquivo executável e execute-o (
chmod +x filename.sh; ./filename.sh)
Se você realmente precisar de eval de cada linha de um arquivo em um loop, faça isso com while :
while IFS= read -r line; do eval "$line"; done < filename.sh
Você também pode canalizar a saída de qualquer comando para while :
grep foo filename.sh | while IFS= read -r line; do eval "$line"; done
Se você precisar passar algo para source (ou . ), que espera um nome de arquivo como argumento, você pode usar processo de substituição :
source <( grep foo filename.sh )