2016-07-31 17 views
0

https://github.com/mathiasbynens/dotfiles dotfiles를 분기하고 "최신 버전을 가져 와서 파일을 홈 폴더로 복사"해야하는 bootstrap.sh를 실행하려고했습니다. .md쉘 스크립트 오류 : bootstrap.sh:13 : = 찾을 수 없음

그러나 bootstrap.sh를 소스하려고하면 오류가 반환됩니다. "bootstrap.sh:13 : = 찾을 수 없습니다". 라인 (13)은 사람이 그것을 잘못 생각이 있습니까

if [ "$1" == "--force" -o "$1" == "-f" ]; then doIt;

에서 doIt 부분입니까? 미리 감사드립니다.

#!/usr/bin/env bash 

cd "$(dirname "${BASH_SOURCE}")"; 

git pull origin master; 

function doIt() { 
    rsync --exclude ".git/" --exclude ".DS_Store" --exclude ".osx" \ 
    --exclude "bootstrap.sh" --exclude "README.md" --exclude "LICENSE-MIT.txt" -avh --no-perms . ~; 
    source ~/.bash_profile; 
} 

if [ "$1" == "--force" -o "$1" == "-f" ]; then 
    doIt; 
else 
    read -p "This may overwrite existing files in your home directory. Are you sure? (y/n) " -n 1; 
    echo ""; 
    if [[ $REPLY =~ ^[Yy]$ ]]; then 
     doIt; 
    fi; 
fi; 
unset doIt; 
+2

어떻게 실행하나요? – melpomene

+0

bashisms에 (구문, 의미 또는 가독성) 이점이 전혀없는 경우에도 POSIX sh 준수 사례를 사용하려는 노력을 분명히하지 않았습니다. 나는이 스크립트 사용에 대해 약간 회의적 인 경향이있다. –

+0

... 실제로 문제의 일부입니다.이 스크립트는 bash 전용으로 작성되었으므로 사용중인 쉘은 bash가 아닙니다. –

답변

0

당신의 쉘이 [ 명령에 ==에 문제가있는 것 같다. 사실,이 연산자는이 이전 명령에 대해 문서화되어 있지 않으므로 일부 셸에서는이 명령이 마음에 들지 않을 수도 있습니다.

스크립트 이런 식으로 실행하면 명령은 예를 들어, 현대 배쉬에서 작동합니다 :

bash bootstrap.sh 

또는 이러한 방법 :

./bootstrap.sh 

이상적으로, 스크립트가 모호한 구문을 사용하지 말아야을 예를 들어 다음과 같이 사용하십시오.

if [[ $1 == --force || $1 == -f ]]; then 
+0

... 또는'case $ 1 in --force | -f) ...'를 POSIX 대안으로 사용하십시오. –

+0

아니면'[ "$ 1"= "--force"] || [ "$ 1"= "-f"]; then' – Kusalananda

+0

이 스크립트는 Bash를 위해 설계 되었기 때문에 (POSIX 이외의 POSIX 사용법도 참고), POSIX 호환이 여기서는 관련이 없다고 생각한다. – janos