Ошибка сценария оболочки: bootstrap.sh:13: = не найден

Я разветвлял https://github.com/mathiasbynens/dotfiles dotfiles и попытался запустить bootstrap.sh, который, очевидно, должен "извлечь последнюю версию и скопировать файлы в вашу домашнюю папку", согласно README.md

Но когда я пытаюсь найти файл bootstrap.sh, возвращается ошибка. "bootstrap.sh:13:= не найден". Линия 13 является doIt участие в

if [ "$1" == "--force" -o "$1" == "-f" ]; then 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;

1 ответ

Кажется, у вашей оболочки проблема с == в [ команда. Дело в том, что этот оператор недокументирован для этой старой команды, поэтому возможно, что некоторым оболочкам он не понравится.

Команда должна работать в современном Bash, например, если вы запускаете скрипт так:

bash bootstrap.sh

или так:

./bootstrap.sh

В идеале сценарий не должен использовать неясный синтаксис, например, используйте это вместо:

if [[ $1 == --force || $1 == -f ]]; then
Другие вопросы по тегам