Синтаксическая ошибка в .bashrc после установки gsutil

На компьютере с Linux я пытаюсь установить gsutil, следуя инструкциям на https://cloud.google.com/storage/docs/gsutil_install. Во время установки я ответил «да» на все и оставил значения по умолчанию.

Однако теперь, если я открою новый терминал, он запустится с ошибкой bash:

bash: /home/kurt/.bashrc: line 119: syntax error near unexpected token `fi'
bash: /home/kurt/.bashrc: line 119: `fi'
kurt@kurt-ThinkPad:~$

Оскорбительные строки содержатся в следующем фрагменте моего файла .bashrc:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
  source '/home/kurt/Downloads/google-cloud-sdk/path.bash.inc'
fi
  source '/home/kurt/Downloads/google-cloud-sdk/completion.bash.inc'
fi

Ошибка возникает во предпоследнем операторе fi. Действительно, похоже, что последние два fi не соответствуют ни одному if. Я мог бы просто закомментировать последние три строки, но я не уверен, что это нарушит функциональность. Любой совет?


person Kurt Peek    schedule 05.10.2016    source источник
comment
Почему последние 3 строчки висят без всякой логики?   -  person Inian    schedule 05.10.2016
comment
Меня это тоже озадачивает. Казалось бы маловероятным, что Google поставит код с синтаксическими ошибками, однако эти строки, похоже, были добавлены программой установки.   -  person Kurt Peek    schedule 05.10.2016


Ответы (1)


Глядя на фрагмент .bashrc, вы не нарушите никакой функциональности, удалив последние два ключевых слова fi. Возможно, ранее в файле было соответствующее ключевое слово if, но судя по отступу и содержимому предыдущего блока (настройка завершения bash), я в этом сомневаюсь.

Я предполагаю, что недостающие строки проверяют, существуют ли два файла (и доступны ли они для чтения), прежде чем пытаться их source:

if [ -r '/home/kurt/Downloads/google-cloud-sdk/path.bash.inc' ]; then
  source '/home/kurt/Downloads/google-cloud-sdk/path.bash.inc'
fi

if [ -r '/home/kurt/Downloads/google-cloud-sdk/completion.bash.inc' ]; then
  source '/home/kurt/Downloads/google-cloud-sdk/completion.bash.inc'
fi

Похоже, что в установщике есть ошибка, которая генерирует эти строки. Чтобы быть в безопасности, я бы повторно загрузил пакет и снова запустил программу установки.

person Anthony Geoghegan    schedule 05.10.2016