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.
()
literally, so\(
and\)
are used to delimit the group. Yes,\1
matches the contents of that group. – cxw Aug 08 '15 at 12:46execute() { $1 &> /dev/null; print_result $? "${2:-$1}"; }
in the same file as being executed here. – Aug 08 '15 at 16:35