"실행" 명령과 이상한 정규식을 사용하는 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

관련 정보