Запретить автозаполнение пути от использования CDPATH в bash?

Очевидно, необходимо измениться в каталог, который является Рабочим столом прежде. Если Ваш рабочий стол ~/Desktop затем команда, в которой Вы нуждаетесь:

cd ~/Desktop
# the following command shows you the files (and more) in this directory
ls

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

4
20.08.2015, 07:15
2 ответа

Правильный способ - использовать следующее в вашем ~ / .bashrc , как @Gilles предложил выше (здесь более короткая версия):

_my_cd () { CDPATH= _cd "$@";}

Лучше всего проверить CDPATH тогда и только тогда, когда нет совпадения обнаруживаются локально:

_my_cd () { CDPATH= _cd "$@"; if [ -z "$COMPREPLY" ]; then _cd "$@"; fi;}

Таким образом, вы получаете функциональность программируемого завершения, не доставляя неудобств. Не забывайте

complete -F _my_cd cd

По какой-то причине / usr / share / bash-Completion / bash_completion имеет -o nospace для cd (хотя nospace кажется по умолчанию), так что вы также можете иметь:

complete -F _my_cd -o nospace cd
2
27.01.2020, 20:55

Виноват ваш bash_completion, а не ваша версия bash вообще.

С головная версия из bash_completion repo, cd автозавершение включает каталоги под CDPATH.

Вы можете внести изменения непосредственно в местное bash_completion, но лучше написать свое собственное cd автозавершение.


Если вы хотите получить глобальный эффект, создайте файл с именем /etc/bash_completion.d/cd со следующим содержимым:

_cd()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    _init_completion || return

    local IFS=$'\n' i

    compopt -o filenames

    local -r mark_dirs=$(_rl_enabled mark-directories && echo y)
    local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y)

    _filedir -d

    if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
        i=${COMPREPLY[0]}
        if [[ "$i" == "$cur" && $i != "*/" ]]; then
            COMPREPLY[0]="${i}/"
        fi
    fi

    return 0
}
if shopt -q cdable_vars; then
    complete -v -F _cd -o nospace cd
else
    complete -F _cd -o nospace cd
fi

Эта версия получила все от оригинала, исключая часть CDPATH.


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

_my_cd () {
  declare CDPATH=
  _cd "$@" 
}

complete -F _my_cd cd

Есть некоторые случаи, когда завершение bash не работало с CDPATH в вашей Mac OSX, ваше bash_completion слишком старое, или вы его еще не загрузили.

С помощью переменной BASH_COMPLETION_COMPAT_DIR можно установить место, куда bash_completion загружает пользовательскую функцию завершения, по умолчанию /etc/bash_completion.d.

2
27.01.2020, 20:55

Теги

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