Автоматическое заполнение имени файла в каталоге

И оператор позволяет приложению работать в фоновом режиме. Использовать

nohup gedit

или

nohup gedit &

(последний позволяет Вам использовать терминал после запуска gedit, просто нажать возврат для отправки его в фон). Nohup диспетчеризирует приложение полностью от терминала и сессии.

16
13.04.2017, 15:36
4 ответа

Попытка:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(ls /something/)" -- $cur) )
}

complete -F _codeComplete hi

Необходимо указать -W опция в compgen и также заключите в кавычки команду, которая производит список слов.

Больше информации о том, как записать завершение, функционирует на этом блоге: Запись Вашей собственной Функции Завершения Bash

15
27.01.2020, 19:48
  • 1
    Это перестанет работать на именах файлов, содержащих пробел и другие специальные символы. –  Gilles 'SO- stop being evil' 05.01.2012, 01:39
  • 2
    Странно трудно найти название complete управляйте, не знаете ли Вы уже это и ищете autocomplete или tab-completion... Это было первым местом, я нашел название команды, и для чего я должен был зафиксировать его eject на обновлении Ubuntu 14.04 ($ complete -p ls -> complete -F _longopt ls, таким образом, фиксация была: complete -F _longopt eject) (Здесь надеется, что этот комментарий помогает другим найти его!) –  Izkata 01.09.2014, 23:10

Попробую улучшить принятый ответ.

Оригинальный ответ не работает, если имена файлов содержат пробелы. После некоторого исследования я понял, что можно изменить входной разделитель на конец строки:

IFS=$'\n'

чтобы функция корректно обрабатывала пробелы.

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    IFS=$'\n' tmp=( $(compgen -W "$(ls ~/something/ )" -- $cur))
    COMPREPLY=( "${tmp[@]// /\ }" )
}

complete -F _codeComplete hi
1
27.01.2020, 19:48

Aquí hay una versión que no solo maneja los espacios, sino que también los escapa:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local AUTO_COMPLETE_DIRS=$(ls /something/)

    IFS=$'\n' COMPREPLY1=( $(compgen -W "$AUTO_COMPLETE_DIRS" -- $cur))
    COMPREPLY2=( "${COMPREPLY1[@]// /\ }" )
    COMPREPLY=($(printf "%q\n" "${COMPREPLY2[@]}"))

}
complete -F _codeComplete "hi "

(Basado en las respuestas de dogbane y Eduardo Almeida dos Santos , pero con el escape proporcionado por antak en SO:https://stackoverflow.com/a/11536437/1536933)

1
27.01.2020, 19:48
_hi() {
    COMPREPLY=(cd /something/ && compgen -A directory -S / -- $2)
}

complete -o nospace -F _hi hi
0
27.01.2020, 19:48

Теги

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