Bash не расширяет переменные при нажатии клавиши Tab.

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

В предыдущих версиях Ubuntu 18.04 переменные в Bash развертывались при нажатии на клавишу Tab. Но в Ubuntu 20.04 (с использованием bash 5.0.16) переменные не разворачиваются. Вместо этого знак доллара $ перед переменной предшествует обратной косой чертой.

Например, предположим, у меня есть переменная MY_DIRECTORY:

export MY_DIRECTORY=/path/to/a/folder

Теперь, когда я пишу что-то вроде этого:

ls $MY_DIRECTORY<Tab key>

Я получаю:

ls \$MY_DIRECTORY

Как видите, переменная не разворачивается в желаемый путь. В чем тут дело?

У вас есть две возможности для развертывания переменной в Bash:

  • Используйте сочетание клавиш Ctrl+Alt+E всякий раз, когда хотите развернуть переменную.

    Например, если я пишу в своем терминале:

    $LANG $BASH
    

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

    en_US.UTF-8 /usr/bin/bash
    

    Из man bash, если вы поищите “M-C-e” (“M” означает “Meta”, что соответствует клавише Alt на большинстве клавиатур, а “C” означает Control):

    shell-expand-line (M-C-e)
           Развернуть строку как это делает оболочка. Это выполняет развертывание псевдонимов и истории, а также все расширения слов оболочки. Смотрите раздел ИСТОРИЯ РАЗВЕРТКИ ниже для описания развертывания истории.
    
  • Включите параметр shopt direxpand, выполнив в своем терминале:

    shopt -s direxpand
    

    Теперь, если вы наберете:

    ls $MY_DIRECTORY/<Tab key>
    

    он будет развернут в:

    ls /path/to/a/folder/
    

    Чтобы параметр direxpand был включен для всех сеансов терминала, добавьте shopt -s direxpand в ваш файл ~/.bashrc вручную или выполнив:

    echo "shopt -s direxpand" >> ~/.bashrc
    

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

Почему переменные в Bash не расширяются при нажатии клавиши Tab в Ubuntu 20.04?

В версиях Ubuntu, таких как 18.04, по умолчанию была включена функция расширения переменных при нажатии клавиши Tab в командном интерпретаторе Bash. Однако в Ubuntu 20.04, использующей Bash версии 5.0.16, данное поведение изменилось. Теперь при попытке завершить переменную с помощью клавиши Tab вместо ожидаемого пути отображается экранированное имя переменной, например, \$MY_DIRECTORY.

Причины изменения поведения

Это изменение связано с обстоятельствами, касающимися настройки командного интерпретатора, а именно, с опцией direxpand, которая отвечает за расширение переменных во время завершения команд. В случае, если эта опция не активирована, Bash будет просто экранировать символ доллара, предотвращая его интерпретацию как обозначение переменной.

Решения для расширения переменных

Существуют два основных способа решения проблемы нерасширяемости переменных в Bash:

  1. Использование сочетания клавиш:
    Для временного расширения переменных вы можете воспользоваться сочетанием клавиш Ctrl + Alt + E. Для этого введите строку с переменными, например:

    $LANG $BASH

    После нажатия сочетания клавиш результат будет автоматически расширен до текущих значений переменных, таких как en_US.UTF-8 /usr/bin/bash.

    Помните, что эта функция может потребовать предварительного изучения справочного руководства Bash (man bash) для лучшего понимания возможностей и конфигураций.

  2. Включение опции direxpand:
    Параметр direxpand может быть включен для автоматического расширения версий переменных при помощи команд завершения. Для этого выполните в терминале команду:

    shopt -s direxpand

    Теперь при введении команды с переменной, такой как:

    ls $MY_DIRECTORY/<Tab>

    вы получите желаемый результат:

    ls /path/to/a/folder/

    Чтобы сделать это изменение постоянным для всех будущих терминальных сессий, добавьте строку shopt -s direxpand в ваш файл конфигурации ~/.bashrc. Это можно сделать и с помощью следующей команды:

    echo "shopt -s direxpand" >> ~/.bashrc

Заключение

В Ubuntu 20.04 поведение Bash изменилось, и расширение переменных при нажатии клавиши Tab больше не происходит по умолчанию. Однако использование сочетания клавиш или активация опции direxpand способны вернуть это удобное поведение. Эти настройки помогут улучшить вашу продуктивность в терминале Ubuntu и существенно упростят работу с переменными в Bash.

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

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