Рекомендует ли apt install дочерние пакеты?

Кажется, вы хотите запросить carrierфайлы в /sys/class/net/*/, чтобы узнать, есть ли хотя бы один, указывающий, находитесь ли вы в сети или нет, (игнорируя*/lo/carrier).

С петлей-раковиной:

#!/bin/sh

online=0
for carrier in /sys/class/net/*/carrier; do
    case "$carrier" in
        */lo/carrier) continue ;;
    esac

    if read online <"$carrier" && [ "$online" -eq 1 ]; then
        break
    fi
done

if [ "$online" -ne 1 ]; then
    echo 'not online' >&2
    exit 1
fi

Использованиеbash:

#!/bin/bash

shopt -s extglob

online=0
for carrier in /sys/class/net/!(lo)/carrier; do
    if read online <"$carrier" && [ "$online" -eq 1 ]; then
        break
    fi
done

if [ "$online" -ne 1 ]; then
    echo 'not online' >&2
    exit 1
fi

Или, как bash"почти -один -лайнер"

#!/bin/bash

shopt -s extglob

grep -qx 1 /sys/class/net/!(lo)/carrier || ! echo not online >&2

Последнее предполагает, что файлы содержат одну цифру 1, если этот носитель находится в сети и что нет данных, или, по крайней мере, нет 1, если это не так.

Циклы выше (с использованиемread)будут считывать только первую строку из каждого файла carrier, пока не будет найден файл 1.


Проблема в вашем коде заключается в подстановке команд $(/sys/class/net/*), которая попытается выполнить первое совпадающее имя файла как команду с другими совпадающими именами файлов в качестве аргументов.

Кроме того, проверка [ $OnLine ]будет "истинной", если $OnLineне является -пустым. Я не уверен, что содержат файлы, которые вы анализируете, если носитель не находится в строке -, но даже ноль здесь будет восприниматься как «истина».

1
28.08.2020, 13:58
2 ответа

Общее правило заключается в том, что если Install-Recommendsвключено, то для установки учитываются рекомендации вновь -установленных пакетов,и это применяется транзитивно — для нового -установленного пакета, выбранного по рекомендации, будут учитываться собственные рекомендации для установки.

Однако другие соображения могут помешать установке рекомендации, и поскольку это всего лишь рекомендация, это не будет считаться фатальной ошибкой. В примере hollywoodrun-oneбудет рассматриваться для установки, но в Debian он не будет установлен, потому что пакет недоступен (, это пакет Ubuntu ). Аналогичным образом, если рекомендуемый пакет конфликтует с уже -установленным пакетом, он не будет установлен. Любые дальнейшие зависимости или рекомендации такого пакета также не будут рассматриваться.

Все это применимо ко всем aptоперациям:installочевидно, но также и upgrade. Если обновление пакета вводит новую зависимость, которая еще не установлена, этот пакет будет установлен, и будет применяться описанная выше обработка вновь -установленных пакетов. С другой стороны, обновления пакетов, вводящие новые рекомендации, не приведут к дополнительным установкам, поскольку рекомендации не определены для вновь-установленных пакетов.

2
18.03.2021, 23:10

В моей системе уже есть less, поэтому давайте подумаем о run-one.

hollywood
|- [dep] byobu
|  |- [rec] run-one
|
|- [rec] atop
|  |- [rec] cron

Затем, когда я пытаюсь установить (удаляются неинтересные пакеты из текста):

$ sudo apt install -o APT::Install-Recommends="true" hollywood
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  atop byobu cron
Recommended packages:
  run-one
The following NEW packages will be installed:
  atop byobu cron hollywood

Похоже, что aptделает следующее:

  • byobu(dep )установлен, но его рекомендуемый пакет run-oneпока только рекомендуется.
  • atop(rec )установлен, и его рекомендуемый пакет:cron | cron-daemonустановлен.

Чтобы обобщить то, что мы только что наблюдали при использовании этой опции,:

  • Рекомендации пакета установлены
  • Рекомендации по зависимостям пакета не установлены.
  • Устанавливаются рекомендации пакета.

Меня удивило, что будет установлена ​​рекомендация рекомендации. Я подтвердил, что cronне является зависимостью одного из других пакетов, которые были бы установлены.

1
18.03.2021, 23:10

Теги

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