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

Если Вы смотрите на файлы /usr/share/bash-completion/completions/* у многих есть функциональное определение, сопровождаемое && complete -F (по крайней мере, в Гостеприимном). Почему это?

Нотация имеет некоторое особое значение в файле завершения удара?

В ударе я не вижу функционального различия между сценариями

a(){ echo in;return 1;} && a

и

a(){ echo in;return 1;}; a
1
задан 19 November 2016 в 11:04

2 ответа

Справочник Bash говорит

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

Синтаксическая ошибка может завершить выполнение сценария перед эти complete -F команда, таким образом, команда после объявления функции не может быть выполнена так или иначе, но если функция только для чтения с тем же именем объявляется прежде, чем получить файл, содержащий функцию, это не может завершить выполнение. Препятствовать тому, чтобы неправильная функция завершения удара была названа, такое логическое И тест, используется.

1
ответ дан 7 December 2019 в 15:44

complete удар встроены, который говорит удар , как автоматически заполнить в различных ситуациях. В частности, complete -F funcname cmdname говорит удар , что, если пользователь ввел команду 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

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

Это - просто вопрос стиля кодирования, и этот стиль не ужасен или тверд понять.

0
ответ дан 7 December 2019 в 15:44

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

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