Как установить интервал для асинхронной команды в bash?

Начиная с версии 1.1 ~exp1, aptи apt-getподдерживают установку из файлов пакетов, доступных через файловую систему, а не только из репозиториев. Однако, чтобы сохранить обратную совместимость, эта функция работает только для спецификаторов пакетов, которые являются безошибочно файлами, т. е. , которые содержат /. Все остальное обрабатывается как пакет имя , а не пакет файл , с использованием ранее -существующих механизмов.

Итак,

sudo apt install wkhtmltox_0.12.5-0.20180604.140.rc~6f77c46~bionic_amd64.deb

обрабатывается как запрос на установку пакета с именем «wkhtmltox _0.12.5 -0.20180604.140.rc ~6f77c46 ~bionic _amd64.deb», а aptидет ищет это в своих репозиториях и терпит неудачу.

Но

sudo apt install./wkhtmltox_0.12.5-0.20180604.140.rc~6f77c46~bionic_amd64.deb

обрабатывается как запрос на установку пакета, содержащегося в файле с именем «./wkhtmltox _0.12.5 -0.20180604.140.rc ~6f77c46 ~bionic _amd64.deb» (вместе со своими зависимостями, если необходимо ). Это также работает для абсолютных путей.

Я не могу найти никаких следов этого в документации apt, кроме краткого упоминания в журнале изменений:

  • add support for "apt-get install foo_1.0_all.deb"

Существует ошибка, требующая документирования этой функции .

3
02.05.2020, 19:09
1 ответ

Одна вещь, которую нужно попробовать для достижения степени асинхронной установки переменной, это:

#!/usr/bin/env bash

async() {
  while :; do
    # send SIGUSR1 to "parent" script
    kill -USR1 "$1"
    sleep 1
  done
}

# provide PID of script to async
async $$ &
async_pid=$!

declare -i i=0
update() {
  i=42
}

cleanup() {
  kill ${async_pid}
}

trap update USR1
trap cleanup EXIT

echo $i
sleep 2
echo $i

Одно предостережение при таком подходе: :если сценарий находится в спящем режиме и сигнал поднят, команда updateвыполняется только один раз, когда сценарий снова «бодрствует».

1
28.04.2021, 23:16

Теги

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