Script Bash com comando “execute” e regexp estranho

1

Então, eu estava procurando por dotfiles de Paul Irish e encontrei referências a este script bash:

#!/bin/bash

cd "$(dirname "$BASH_SOURCE")" \
    && source 'utils.sh'

declare -a FILES_TO_SYMLINK=(

    'shell/bash_aliases'
    'shell/bash_exports'
    'shell/bash_functions'
    'shell/bash_logout'
    'shell/bash_options'
    'shell/bash_profile'
    'shell/bash_prompt'
    'shell/bashrc'
    'shell/curlrc'
    'shell/inputrc'
    'shell/screenrc'
    'shell/tmux.conf'

    'git/gitattributes'
    'git/gitconfig'
    'git/gitignore'

    'vim/vim'
    'vim/vimrc'
    'vim/gvimrc'

)

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

main() {

    local i=''
    local sourceFile=''
    local targetFile=''

    for i in ${FILES_TO_SYMLINK[@]}; do

        sourceFile="$(cd .. && pwd)/$i"
        targetFile="$HOME/.$(printf "%s" "$i" | sed "s/.*\/\(.*\)//g")"

        if [ -e "$targetFile" ]; then
            if [ "$(readlink "$targetFile")" != "$sourceFile" ]; then

                ask_for_confirmation "'$targetFile' already exists, do you want to overwrite it?"
                if answer_is_yes; then
                    rm -rf "$targetFile"
                    execute "ln -fs $sourceFile $targetFile" "$targetFile → $sourceFile"
                else
                    print_error "$targetFile → $sourceFile"
                fi

            else
                print_success "$targetFile → $sourceFile"
            fi
        else
            execute "ln -fs $sourceFile $targetFile" "$targetFile → $sourceFile"
        fi

    done

}

main

Há duas coisas neste script que realmente me confundem.

Em primeiro lugar, o que este sed realmente faz?

sed "s/.*\/\(.*\)//g"

Em segundo lugar, o que executar faz?

Não foi possível encontrar nada no comando execute.

    
por Mattias 08.08.2015 / 12:47

1 resposta

3
  1. O comando sed parece estar tomando o nome de base do arquivo. Remove qualquer coisa antes de uma barra.

  2. A função execute deve ser definida em utils.sh, o que não vejo nesse repo. Parece que ele executa o comando fornecido como seu primeiro argumento e (em sucesso?) Imprime a mensagem dada em seu segundo argumento.

Parece-me que o resultado é fazer, por exemplo, ~/.gitignore um link simbólico para git/gitignore .

    
por 08.08.2015 / 13:01