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

#bash #gsutil

#bash #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 s не совпадают ни if с одним . Я мог бы просто прокомментировать последние три строки, но я не уверен, что это нарушит функциональность. Любой совет?

Комментарии:

1. Почему последние 3 строки висят без какой-либо логики?

2. Это меня тоже озадачивает. Маловероятно, что Google отправит код с синтаксическими ошибками, однако эти строки, похоже, были добавлены программой установки.

Ответ №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
  

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