Вопрос или проблема
Всякий раз, когда я открываю терминал, я получаю следующую строку в качестве первой строки в терминале:
неизвестный параметр: --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
, выполните следующие шаги:
-
Удалите версию, установленную с помощью
apt
:sudo apt remove fzf
-
Удалите каталог
~/.fzf
, если он существует, и установите fzf с помощьюgit
:rm -rf ~/.fzf git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install
-
Выполните
fzf --version
. Теперь вы должны увидеть:$ fzf --version 0.52.1 (6432f00)
-
Восстановите ваш файл
~/.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, это и является источником проблемы.
Шаги для исправления ошибки
-
Удалите установленную через
apt
версиюfzf
:
Запустите следующую команду в терминале:sudo apt remove fzf
-
Удалите директорию
~/.fzf
, если она существует:
Это необходимо для избежания конфликтов с предыдущими установками:rm -rf ~/.fzf
-
Установите последнюю версию
fzf
с помощьюgit
:
Запустите следующие команды для загрузки и установки:git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install
-
Проверьте, установлена ли новая версия
fzf
:
После установки выполните команду:fzf --version
Убедитесь, что версия выше 0.48.0. Если всё прошло успешно, вы должны увидеть что-то вроде этого:
0.52.1 (6432f00)
-
Восстановите или измените файл
~/.bashrc
:
Теперь, если вы снова запустите сессию терминала, командаeval "$(fzf --bash)"
должна выполниться без ошибок.
Дополнительные рекомендации
-
Обновление
fzf
:
В будущем, если вам потребуется обновитьfzf
, вы можете использовать следующую команду:cd ~/.fzf && git pull && ./install
-
Проверка других конфигурационных файлов:
Если ошибка все равно возникает, проверьте другие файлы конфигурации, такие как~/.bash_profile
или~/.bash_login
, на наличие схожих команд.
Заключение
Ошибка «unknown option: –bash» является следствием использования устаревшей версии fzf
с неподдерживаемым параметром. Удалив старую версию и установив последнюю строительную версию через git
, вы сможете устранить проблему. Не забывайте периодически обновлять fzf
, чтобы использовать последние функции и исправления.