Depois de remover os comentários de packages.txt
, o que você tem é uma lista de nomes de pacotes separados por espaço em branco. Há um operador de shell para dividir uma string em partes separadas por espaço em branco: variável sem aspas ou substituição de comando. A expansão sem aspas é, na verdade, o operador “split + glob”: trata o resultado da expansão como uma lista de padrões globais que devem ser expandidos. Mas como os nomes dos pacotes deb não contêm nenhum caractere curinga da shell, a etapa glob não fará nada, portanto você pode usar o operador split + glob.
Espaços e novas linhas são separadores válidos por padrão, portanto, você não precisa converter as novas linhas em espaços. Apenas mantenha o padrão IFS
. E você também não precisa despir linhas em branco, já que vários separadores são tão bons quanto um (quando os separadores são espaços em branco).
aptitude install $(grep -v '^#' packages.txt)