Почему есть & amp; & amp; после некоторых определений функций в файле завершения bash?

По состоянию на ноябрь 2017 года, похоже, не работает ни один ppa (ни команда лунного света, ни пинты-сопровождающие). Версия 1.6 все еще может быть установлена ​​из Ubuntu Software Center и работает в основном хорошо. Разработчик написал в июле 2017 года: развитие Pinta «, безусловно, замедлилось - в последнее время у меня не было очень свободного времени для работы». Надеюсь, это снова изменится.

1
задан 19 November 2016 в 12:04

1 ответ

complete является встроенным bash, который сообщает bash, как автозаполнение в различных ситуациях. В частности, complete -F funcname cmdname сообщает bash, что если пользователь ввел команду cmdname, то завершение аргументов должно обрабатываться функцией funcname. Используйте help complete и man bash для получения дополнительной информации. Многие системные файлы автозаполнения устанавливают функции автозаполнения с использованием шаблона

_cmd_name () {
  ... compute completions here and assign them to COMPREPLY ...
  return 0
} && complete -F _cmd_name cmd_name

Например,

_apt_get () {
  ... compute completions here and assign them to COMPREPLY ...
  return 0
} && complete -F _apt_get apt-get

, который сообщает bash , что если пользователь имеет type apt-get в качестве имени команды, тогда автозаполнение будет обрабатываться функцией _apt_get.

Это чисто вопрос стиля кодирования, и этот стиль не уродливый или трудно понять. [!d11 ]

0
ответ дан 23 May 2018 в 04:04
  • 1
    Я привык понимать && как логический оператор И, который выполняется слева направо. Поэтому мне неловко использовать его после определения функции. Функции выполняются только, если они вызываются. – jarno 19 November 2016 в 13:34
  • 2
    _func() { ... body ... ; } && complete -F _func _cmd означает _func() { ... body ... } ; [ "$(type -t _func 2>/dev/null)" = "function" ] && complete -F _func _cmd, но короче и легче на глазах. Определение функции может привести к сбою , как и все остальное в этом подлунарном мире. – AlexP 19 November 2016 в 15:09
  • 3
    Я тестировал это, и _func() { ... body ... ; }; complete -F _func _cmd, похоже, работал одинаково. Если в func была синтаксическая ошибка, дальнейшие команды не были получены. – jarno 19 November 2016 в 18:00
  • 4
    Равенство, о котором вы говорите в своем предыдущем комментарии, неточно; см. мой ответ. – jarno 20 November 2016 в 14:16

Другие вопросы по тегам:

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