Até a instrução aguardando que o processo termine de ser ignorado

1

Eu estou tentando automatizar a instalação do git sem usar privilégios sudo, uma solução legal (mas lenta) é instalar o Xcode que vem junto com o git, pois xcode-select --install pode ser invocado por um usuário padrão

#!/bin/bash
# check if user has git installed
which git &> /dev/null
OUT=$?
sleep 3


# if output of git check is not 0(not foud) then run installer
if [ ! $OUT -eq 0 ]; then
    xcode_dialog () {
        XCODE_MESSAGE="$(osascript -e 'tell app "System Events" to display dialog "Please click install when Command Line Developer Tools appears"')"
        if [ "$XCODE_MESSAGE" = "button returned:OK" ]; then
            xcode-select --install
        else
            echo "You have cancelled the installation, please rerun the installer."
        fi
    }
    xcode_dialog
fi

# get xcode installer process ID by name and wait for it to finish
until  [ ! "$(pgrep -i 'Install Command Line Developer Tools')" ]; do
    sleep 1
done

echo 'Xcode has finished installing'

which git &> /dev/null
OUT=$?
if [ $OUT = 0 ]; then
    echo 'Xcode was installed incorrectly'
    exit 1
fi

Minha instrução until , no entanto, é completamente ignorada e a segunda verificação do git é acionada quase tão logo quanto XCODE_MESSAGE retorna OK. Alguém sabe como a lógica a esperar pelo término do instalador poderia ser melhor implementada?

    
por Micks Ketches 01.12.2017 / 22:00

1 resposta

1

Eu mudaria um pouco a abordagem que você segue em seu script: verifique se "git" existe, em vez de verificar se o processo de instalação não está em execução:

#!/bin/bash

# check if user has git installed and propose to install if not installed
if [ "$(which git)" ]; then
        echo "You already have git. Exiting.."
        exit
else
        XCODE_MESSAGE="$(osascript -e 'tell app "System Events" to display dialog "Please click install when Command Line Developer Tools appears"')"
        if [ "$XCODE_MESSAGE" = "button returned:OK" ]; then
            xcode-select --install
        else
            echo "You have cancelled the installation, please rerun the installer."
            # you have forgotten to exit here
            exit
        fi
fi

until [ "$(which git)" ]; do
        echo -n "."
        sleep 1
done
echo ""

echo 'Xcode has finished installing'
    
por 02.12.2017 / 00:42