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.sh
ou. 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 )