Como determinado script faz executáveis em / usr / local / bin /

0

Enquanto fazia o projeto, encontrei um script que foi lançado sobre minha cabeça. Você pode me ajudar a entender esse roteiro? Por favor, explique este script passo a passo.

SCRIPT

if ! [ -f /usr/local/bin/XXX -a -f /usr/local/bin/YYY -a -f /usr/local/bin/ZZZ ]
then
    if [ "'uname'" = "Linux" ]
    then
        UUDECODE="uudecode -o /dev/stdout"
    else
        UUDECODE="uudecode -p"
    fi
    cat $0 | awk 'printme == "1" {print} /^DATA BEGINS HERE/ {printme = "1"}' | ${UUDECODE} | (cd /usr/local/bin ; sudo tar xzf - --unlink)
    sudo chmod AAAA /usr/local/bin/XXX /usr/local/bin/YYY
fi

Até agora, meu conhecimento

  1. Este script verifica se XXX, YYY, ZZZ está presente em / usr / local / bin, presente ou não.
  2. Se não, então entra no corpo do if.
  3. Se o SO atual for o Linux, ele faz
  4. Mas depois disso eu não entendi.

Estranho depois de executar este script, esses três executáveis estão em / usr / local / bin. Explique abaixo o script linha por linha, por favor.

Uma coisa que eu mencionei é que, no final do script, há alguns dados ilegíveis, começando por "DATA BEGINS HERE". Este script copia esses dados para / usr / local / bin?

    
por devsda 21.03.2013 / 07:46

1 resposta

4

Se for Linux, ele configura UUDECODE para uma forma de chamar o comando uudecode , se não, outro. Não é padrão, então como chamá-lo varia. Não é muito esperto, se você me perguntar.

A linha que inicia cat $0 faz o trabalho real. $0 é o nome do processo em execução, ou seja, do script atual. Mais uma vez, funcionará principalmente, mas pode ser enganado.

O conteúdo do script é canalizado para o script awk , que copia todo o texto após DATA BEGINS HERE para sua saída, que é canalizada para uudecode (o comando configurado anteriormente). uudecode pega o texto e faz um binário dele (o par uuencode / uudecode onde usado para enviar binários como texto antes de HTTP e outros se tornou popular), o resultado é canalizado para o comando em '()', que primeiro muda para /usr/local/bin e depois descompacta a entrada com tar . O --unlink primeiro exclui qualquer arquivo existente.

De onde vem isso?!

    
por 21.03.2013 / 09:15