Заполнение клавишей Tab Bash перестало работать в замене команды

env -i somecommand выполнения somecommand в пустой среде. Можно поместить аргументы после somecommand. Если PATH стирается, необходимо будет указать полный путь к somecommand. Кроме того, можно сохранить PATH или установленный другое значение.

env -i PATH="$PATH:/another/directory" somecommand

Если бы Вы хотите иметь ту же среду, которую Вы имели бы после входа в систему, сохранить всего несколько переменных и загрузить Ваш .profile установить остальных. При использовании другой оболочки входа в систему (колотите с .bash_profile, csh с .login, и т.д.), адаптируйтесь соответственно.

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

С другой стороны, можно предпочесть удалять некоторые переменные из среды. env -u VAR1 -u VAR2 somecommand удаляет VAR1 и VAR2 от среды и выполнений somecommand. В соответствии с Linux, можно использовать env -0 | tr '\n\0' '.\n' | sed 's/=.*//' произвести список переменные среды с одним именем на строку, подходящий для фильтрации. На других вариантах Unix, env | sed 's/=.*//' делает то же задание, с ограничением, что оно может найти ложные положительные стороны, если значения некоторых переменных содержат новые строки.

3
27.08.2014, 05:50
1 ответ

я предполагаю, что мой вопрос состоит в том, где конфигурационные файлы для заполнения клавишей Tab расположены в системе Ubuntu?

В Ubuntu, библиотека завершения удара живет в /usr/share/bash-completion/bash_completion .

при запуске оболочки эта библиотека может быть получена различными способами, например,

  • ~/.bashrc-> /etc/bash_completion-> /usr/share/bash-completion/bash_completion

  • /etc/profile-> /etc/profile.d/bash_completion.sh-> /usr/share/bash-completion/bash_completion

, Если кто-либо имел эту определенную проблему или видит явно, что я не могу, как зафиксировать это, и/или почему это произошло бы? (Я всегда хочу знать почему.)

я недавно ответил связанный вопрос в AskUbuntu (и нашел ваш вопрос в процессе), поэтому там ищите детали, но короче говоря это известная ошибка .

Для исправления можно выполнить следующие действия:

  1. Заменить

      [[$ {! 2} =\$ *]] & & eval $2 = $ {! 2}
    

    с

      [[$ {! 2} =\$\' *]] & & eval $2 = $ {! 2}
    

    в функции _ quote _ readline _ by _ ref в файле /usr/share/bash-completion/bash _ completion (не рекомендуется); или

  2. Проверьте последнюю версию Git библиотеки bash-complete и используйте ее - ошибка, похоже, исправлена в этой версии.

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

Чтобы фактически завершить работу над подстановкой команд, необходимо либо вернуться к более ранней версии Bash (, где, как я слышал, она работала ), либо дождаться, когда библиотека исправит эту проблему с помощью Bash 4.3.

2
27.01.2020, 21:28

Теги

Похожие вопросы