A função shell usa apenas o primeiro argumento

0

Estou escrevendo um script para personalizar uma instalação limpa do Linux e existem várias seções onde ele executa o apt-get install. Eu encontrei alguns problemas com a minha conexão, onde ele ocasionalmente parará de funcionar, o que pode fazer com que o apt-get falhe e, quando isso acontecer, o script continuará a processar os outros comandos.

O script a seguir funciona, exceto que agora estou atingindo outro problema: se a função é emitida como aptinstall firefox firefox-locale-en , por exemplo, ela só instala o primeiro pacote listado.

Eu modifiquei o script para que o apt-get seja executado dentro de uma função que tentará novamente se falhar até 5 vezes:

# Install package - will retry download if connection fails up to 5 times and abort if unsuccessful
function aptinstall (){
local __pkg=$1
    set +x
    n=0
    until [ $n -ge 5 ]
    do
        apt-get install -y $__pkg && break
        n=$[$n+1]
        sleep 15 # Wait 15 seconds before trying to download and install packages again
    done
    if [ "$n" -eq 5 ]; then
        echo >&2 "An error has occurred. Please check your network connection."
        exit 1
    fi

Alguém pode me ajudar a descobrir por que apenas o primeiro pacote está instalado? Obrigado!

    
por RobertL 14.10.2017 / 23:28

1 resposta

1

Em vez de usar $1 use "$@" .

Você não precisa da variável local __pkg. Na minha opinião, isso complica desnecessariamente o roteiro.

Também notei que você está usando $[expression] para avaliação aritmética. Essa sintaxe está obsoleta. Eu recomendaria usar $((expression)) . Por exemplo, n=$((n+1)) .

Isso está além do escopo da sua pergunta, mas se você estiver com problemas com o apt-get de tempo limite, talvez seja interessante procurar soluções para evitar isso, como configurar um espelho local.

    
por 15.10.2017 / 00:19