Я думаю, что лучше всего использовать (фоновый )занятый -цикл ожидания, который обновляет отметку времени sudo, которую вы затем уничтожаете, когда вам больше не нужны sudo
привилегии. Вот пример сценария; он выполняет sleep 6
вместо ваших двух -часов command2
и запускает видимые /bin/echo
команды вместо command1
иcommand2
:
#!/bin/sh
sudo /bin/echo command 1
while :; do sudo -v; sleep 1; done &
infiloop=$!
sleep 6
sudo /bin/echo command 3
kill "$infiloop"
Для вашего сценария я бы рекомендовал более свободный цикл:
#!/bin/sh
sudo command1
while :; do sudo -v; sleep 59; done &
infiloop=$!
command2
sudo command3
kill "$infiloop"
Отрегулируйте sleep 59
по вкусу, в зависимости от существующей настройки timestamp_timeout
в sudoers; Я выбрал 59 только для того, чтобы продемонстрировать выбор, который вы могли бы сделать, если бы время ожидания метки времени составляло 60 секунд.
Проблема в том, что i{
— это целый оператор -, отложенная команда (или текстовый объект ), и сопоставления на самом деле не работают для более поздних частей существующей команды или сопоставления. Если вы хотите поддерживатьi{
(и его другаa{
)в режиме ожидания оператора -и визуальном режиме, вам потребуется дополнительный набор отображений, чтобы сделать это явно :
omap iĸ i{
omap aĸ a{
xmap iĸ i{
xmap aĸ a{
Но гораздо лучший способ выполнить такое сопоставление клавиш — использовать функцию 'langmap'
, которая позволяет переназначать клавиши в обычном режиме. Для вашего конкретного случая использования вам также необходимо установить 'langremap'
.
set langmap=ĸ{
set langremap
Это относится к обычному режиму, визуальному режиму, режиму ожидания оператора -, а также к отображениям, включающим символ {
.
Режим вставки или режим командной строки -не учитывается. Для этого вы можете либо продолжать использовать :map!
(, который обычно работает нормально ), либо также есть опция'keymap'
для режима вставки, эквивалентная 'langmap'
, но 'keymap'
значительно сложнее (включает в себя создание отдельного файла сопоставления с уникальным синтаксисом, и есть несколько дополнительных опций, определяющих, где именно активируется сопоставление.)