“неизвестный параметр: –bash” при открытии терминала

Вопрос или проблема

Всякий раз, когда я открываю терминал, я получаю следующую строку в качестве первой строки в терминале:

неизвестный параметр: --bash

Вот скриншот моего терминала:

терминал показывает ошибку

Вот мой файл ~/.bashrc:

# ~/.bashrc: выполняется bash(1) для интерактивных оболочек.
# см. /usr/share/doc/bash/examples/startup-files (в пакете bash-doc)
# для примеров

# Если не запущен в интерактивном режиме, ничего не делать
case $- in
    *i*) ;;
      *) return;;
esac

# не добавлять дублирующиеся строки или строки, начинающиеся с пробела, в историю.
# См. bash(1) для дополнительных параметров
HISTCONTROL=ignoreboth

# добавлять в файл истории, не перезаписывая его
shopt -s histappend

# для установки длины истории см. HISTSIZE и HISTFILESIZE в bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# проверять размер окна после каждой команды и, если необходимо,
# обновлять значения LINES и COLUMNS.
shopt -s checkwinsize

# Если установлен, шаблон "**", используемый в контексте расширения имени файла,
# будет соответствовать всем файлам и нулю или более каталогам и подпапкам.
#shopt -s globstar

# сделать less более удобным для ввода файлов, не являющихся текстовыми, см. lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# установить переменную, идентифицирующую chroot, в котором вы работаете (используется в подсказке ниже)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# установить красивую подсказку (без цвета, если мы не знаем, что "хотим" цвет)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# раскомментируйте для цветной подсказки, если терминал имеет такую возможность; выключен
# по умолчанию, чтобы не отвлекать пользователя: фокус в окне терминала
# должен быть на выводе команд, а не на подсказке
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # У нас есть поддержка цвета; предполагаем, что это соответствует Ecma-48
    # (ISO/IEC-6429). (Отсутствие такой поддержки крайне редко, и такой
    # случай будет склоняться к использованию setf, а не setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# Если это xterm, установить заголовок на user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# включить поддержку цветов для ls и добавить удобные псевдонимы
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls="ls --color=auto"
    #alias dir="dir --color=auto"
    #alias vdir="vdir --color=auto"

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# цветные предупреждения и ошибки GCC
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# еще несколько псевдонимов для ls
alias ll="ls -alF"
alias la="ls -A"
alias l="ls -CF"

# Добавить псевдоним "оповещение" для долгих команд. Использовать так:
#   sleep 10; alert
alias alert="notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e "\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Определения псевдонимов.
# Вы можете захотеть поместить все ваши добавления в отдельный файл, например
# ~/.bash_aliases, вместо того, чтобы добавлять их прямо здесь.
# См. /usr/share/doc/bash-doc/examples в пакете bash-doc.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# включить функции программного завершения (не нужно включать
# это, если это уже включено в /etc/bash.bashrc и /etc/profile
# загружает /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

# >>> инициализация conda >>>
# !! Содержимое этого блока управляется 'conda init' !!
__conda_setup="$('/home/harshalc03/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/harshalc03/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/home/harshalc03/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/harshalc03/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< инициализация conda <<<

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

А вот и .fzf.bash, поскольку это кажется связанным:

# Настройка fzf
# ---------
if [[ ! "$PATH" == */home/harshalc03/.fzf/bin* ]]; then
  PATH="${PATH:+${PATH}:}/home/harshalc03/.fzf/bin"
fi

eval "$(fzf --bash)"

Я искал в интернете, но не нашел решений этой проблемы. Можете ли вы помочь?

Как @Artur сказал в своем ответе, проблема заключается в параметре --bash в eval "$(fzf --bash)". Более конкретно, если вы посмотрите на страницу fzf на GitHub, вы увидите следующую заметку:

--bash, --zsh и --fish доступны только в fzf 0.48.0 или более поздних версиях. Если у вас старая версия fzf, или если вы хотите более тонкий контроль, вы можете подключить отдельные файлы скриптов в каталоге /shell. Место расположения файлов может варьироваться в зависимости от используемого вами пакетного менеджера. Пожалуйста, обратитесь к документации пакета для получения дополнительной информации. (например, apt show fzf)

Таким образом, вы, вероятно, используете версию fzf, которая не поддерживает этот параметр (выполните fzf --version и посмотрите; вы должны получить версию < 0.48). Это может произойти, если вы установили fzf с помощью apt, который для Ubuntu 24.04 равен 0.44, или если у вас старая версия git установки fzf, для которой вы не подтянули последние изменения.

В любом случае, чтобы установить последнюю версию fzf, которая позволяет интеграцию оболочки с помощью параметра --bash, выполните следующие шаги:

  1. Удалите версию, установленную с помощью apt:

    sudo apt remove fzf
    
  2. Удалите каталог ~/.fzf, если он существует, и установите fzf с помощью git:

    rm -rf ~/.fzf
    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
    
  3. Выполните fzf --version. Теперь вы должны увидеть:

    $ fzf --version
    0.52.1 (6432f00)
    
  4. Восстановите ваш файл ~/.bashrc, поскольку eval "$(fzf --bash)" теперь должен работать.

Вот и все! fzf теперь должен работать правильно с включенными привязками клавиш! В будущем, если вы захотите обновить fzf, вы можете использовать следующую команду:

cd ~/.fzf && git pull && ./install

Проблема находится внутри ~/.fzf.bash.

Я не уверен, что это должно делать (или почему вы запустите это в вашем .bashrc), но команда:

eval "$(fzf --bash)"

Выдает это сообщение об ошибке, поскольку --bash не является допустимым параметром команды fzf.

Так что удалите или как-то исправьте эту недействительную команду.

Ответ или решение

Ошибка «unknown option: –bash» при открытии терминала в Linux может быть вызвана тем, что команда, содержащая параметр --bash, не определяется в установленной версии fzf. Эта ситуация часто возникает из-за устаревшей версии утилиты fzf, когда команда, вызывающая ошибку, прописана в файле конфигурации ~/.bashrc. Давайте подробнее рассмотрим, как решить эту проблему.

Причина проблемы

В вашей конфигурации ~/.bashrc используется строка:

eval "$(fzf --bash)"

Однако параметры --bash, --zsh и --fish доступны только в версиях fzf начиная с 0.48.0. Если ваша текущая версия меньше, вы получите ошибку «unknown option: –bash». Версия можно проверить с помощью команды:

fzf --version

Если вы увидите, что версия меньше 0.48.0, это и является источником проблемы.

Шаги для исправления ошибки

  1. Удалите установленную через apt версию fzf:
    Запустите следующую команду в терминале:

    sudo apt remove fzf
  2. Удалите директорию ~/.fzf, если она существует:
    Это необходимо для избежания конфликтов с предыдущими установками:

    rm -rf ~/.fzf
  3. Установите последнюю версию fzf с помощью git:
    Запустите следующие команды для загрузки и установки:

    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
  4. Проверьте, установлена ли новая версия fzf:
    После установки выполните команду:

    fzf --version

    Убедитесь, что версия выше 0.48.0. Если всё прошло успешно, вы должны увидеть что-то вроде этого:

    0.52.1 (6432f00)
  5. Восстановите или измените файл ~/.bashrc:
    Теперь, если вы снова запустите сессию терминала, команда eval "$(fzf --bash)" должна выполниться без ошибок.

Дополнительные рекомендации

  1. Обновление fzf:
    В будущем, если вам потребуется обновить fzf, вы можете использовать следующую команду:

    cd ~/.fzf && git pull && ./install
  2. Проверка других конфигурационных файлов:
    Если ошибка все равно возникает, проверьте другие файлы конфигурации, такие как ~/.bash_profile или ~/.bash_login, на наличие схожих команд.

Заключение

Ошибка «unknown option: –bash» является следствием использования устаревшей версии fzf с неподдерживаемым параметром. Удалив старую версию и установив последнюю строительную версию через git, вы сможете устранить проблему. Не забывайте периодически обновлять fzf, чтобы использовать последние функции и исправления.

Оцените материал
Добавить комментарий

Капча загружается...