Управление конечными символами с использованием завершении ZSH AutoLoaded

Вопрос немного труден для понимания. Но, если позволите, я могу предложить альтернативный подход. Создайте определенного пользователя, который будет выполнять резервное копирование, и дайте ему права sudo без пароля. Теперь настройте задание cron (или что вы там используете) на запуск от имени этого пользователя, и пусть сценарий резервного копирования повышает (sudo) его права там, где это необходимо.

В качестве альтернативы, в зависимости от того, как настроен ваш Postgres, вы можете просто попросить пользователя postgres выполнять восстановление.

3
17.11.2018, 21:59
1 ответ

Код add-spaceв $fpath[-1]/_expandне связан с завершением через _values; это можно проверить, установив везде add-spaceзначение false или вызвав _complete_debugи посмотрев, через какой код прошло завершение:

% bindkey -M viins "^t" _complete_debug
% foo 
Trace output left in /tmp/zsh438foo2 (up-history to view)

Одним из решений является использование функции -s...функции _values, которая может опционально вставлять разделитель, который обычно используется для объединения нескольких значений, а затем отключать эту функцию, если разделитель использовался:

#compdef foo
local curcontext="$curcontext" state line

choices=(aaa bbb ccc)

_arguments '1:dir:->folders' && return 0

case "$state" in
  folders)
    if ! compset -P '*/'; then
      _values -s / folders $choices
    fi
  ;;
esac

Который на вкладкеfoo aдолжен добавлять косую черту, а затем, поскольку теперь появляется /, тест compsetдолжен предотвращать дополнительные завершения.

2
27.01.2020, 21:24

Теги

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