1

So I was looking through Paul Irish's dotfiles and found reference to this bash script:

#!/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/.*\/\(.*\)/\1/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

There are two things in this script that really confuses me.

Firstly, what does this sed actually do?

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

Secondly what does execute do?

Couldn't find anything on the execute command.

Mattias
  • 1,587

1 Answers1

3
  1. The sed command appears to be taking the basename of the file. It removes anything before a slash.

  2. The execute function must be defined in utils.sh, which I don't see in that repo. It looks like it runs the command given as its first argument then (on success?) prints the message given in its second argument.

Looks to me like the upshot is to make, e.g., ~/.gitignore a symlink to git/gitignore.

cxw
  • 1,246