所以我正在寻找保罗·爱尔兰的点文件并找到参考这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/.*\/\(.*\)/\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
这个脚本中有两件事让我真正困惑。
首先,这个 sed 实际上做了什么?
sed "s/.*\/\(.*\)/\1/g"
其次是什么执行做?
在执行命令上找不到任何内容。
答案1
sed 命令似乎正在获取文件的基本名称。它会删除斜线之前的所有内容。
执行函数必须在 utils.sh 中定义,我在该存储库中没有看到它。看起来它运行作为第一个参数给出的命令,然后(成功时?)打印第二个参数中给出的消息。
在我看来,结果是创建例如~/.gitignore
到 的符号链接git/gitignore
。