带有“执行”命令和奇怪的正则表达式的 Bash 脚本

带有“执行”命令和奇怪的正则表达式的 Bash 脚本

所以我正在寻找保罗·爱尔兰的点文件并找到参考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

  1. sed 命令似乎正在获取文件的基本名称。它会删除斜线之前的所有内容。

  2. 执行函数必须在 utils.sh 中定义,我在该存储库中没有看到它。看起来它运行作为第一个参数给出的命令,然后(成功时?)打印第二个参数中给出的消息。

在我看来,结果是创建例如~/.gitignore到 的符号链接git/gitignore

相关内容