Вопрос немного труден для понимания. Но, если позволите, я могу предложить альтернативный подход. Создайте определенного пользователя, который будет выполнять резервное копирование, и дайте ему права sudo без пароля. Теперь настройте задание cron (или что вы там используете) на запуск от имени этого пользователя, и пусть сценарий резервного копирования повышает (sudo) его права там, где это необходимо.
В качестве альтернативы, в зависимости от того, как настроен ваш Postgres, вы можете просто попросить пользователя postgres выполнять восстановление.
Код 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
должен предотвращать дополнительные завершения.