Como todos sabemos, o comando que usamos para instalar vários pacotes é:
apt install package1 package2 package3`
Usando o seguinte método em um script Bash:
packages="package1 package2 package3"
apt install "$packages"
produz um erro dizendo que o pacote não pode ser localizado. Portanto está incorreto.
O comando a seguir é executado apt
uma vez para cada pacote ou funciona de maneira diferente?
apt install $(cat $packageFile)
assumindo que packageFile é um arquivo de texto contendo os nomes dos pacotes, um por linha.
Eu sei que posso usar um array e colocar todos os nomes de pacotes nele e então usar um loop forapt
para rodar uma vez para cada pacote, mas estou me perguntando se existe uma maneira de instalar todos eles, usando um script Bash, rodando apt
apenas uma vez.
Obrigado.
A abordagem de usar um array está correta, mas você precisa definir o array corretamente. Isso significa que você precisa usar uma instrução composta (ou seja, colchetes) em vez de aspas duplas. Na verdade, a razão pela qual seu comando não funciona em primeiro lugar é porque
$packages
é expandido pelo shell parapackage1 package2 package3
o qual é lido como uma única string porapt
, e não separadamente comopackage1
,package2
,package3
.Portanto, defina uma matriz usando uma atribuição composta na seguinte forma:
e instale todos os pacotes usando o seguinte comando:
Na verdade, qualquer elemento de um array pode ser referenciado usando
${array_name[index]}
, e quando o índice é@
, a palavra se expande para todos os membros do nome do array. O uso de chaves é necessário para evitar conflitos com os operadores de expansão de nome de arquivo do shell.