Entonces, dado que realmente no desea una interrupción, ¿qué le parece deshabilitarla en el nivel de la terminal, con stty intr ""
? Eso haría que ^C
apareciera en el búfer de entrada como cualquier carácter ordinario, y podemos leerlo desde allí.
Esto me funciona en Linux:
#!/bin/bash
t=$(stty -g)
stty intr ""
echo please hold
sleep 5
stty "$t"
# short timeout, just check if there was any input earlier
read -n1 -t0.1 a
[[ "$a" = $'\003' ]] && echo "you hit ^C"
(No puedo probar en OpenBSD, pero supongo que la configuración del terminal es estándar.)
Чтобы получить список установленных пакетов:
dpkg --get-selections '*' > /tmp/selections.txt
Повторно -загрузить установленные пакеты на машину с доступом в Интернет:
apt-get clean
awk '$2=="hold" || $2 == "install" {print $1}' /tmp/selections.txt |
xargs -r apt-get -d -y reinstall
Это загрузит все установленные пакеты в /var/cache/apt/archives/
. xargs
используется здесь в случае, если список установленных пакетов слишком велик, чтобы уместиться в одной командной строке.
Примечание. :запуск apt-get clean
не является обязательным. Он удалит все файлы .deb
, которые уже были в /var/cache/apt/archives
. Это делается только для того, чтобы свести к минимуму количество пакетов, которые необходимо будет скопировать на не -интернет-компьютер (, например. старые версии, удаленные пакеты и т. д., которые все еще присутствуют в этом каталоге ). Минус в том, что все установленные пакеты будут загружены заново, даже если они уже были в директории архивов.
Скопируйте /tmp/selections.txt
в /tmp/
на машине, не подключенной к Интернету -.
Скопируйте все в /var/cache/apt/archives
в тот же каталог на машине, не входящей в -Интернет. Метод не имеет значения -scp, rsync, USB-накопитель, внешний -жесткий диск, что угодно. Важно то, что они копируются в /var/cache/apt/archives
на целевой машине.
на цели (без -интернет )запуск машины:
dpkg --set-selections < /tmp/selections.txt
apt-get dist-upgrade
Если вы хотите, чтобы apt-get dist-upgrade
удалял пакеты, которые ранее были установлены на целевой машине, но НЕ установлены на другой машине, запуститеdpkg --clear-selections
перед запуском dpkg --set-selections
.
Дополнительную информацию об опциях --get-selections
, --set-selections
и --clear-selections
см. на справочной странице dpkg
.