` apt upgrade `пакет без пометки как установленный вручную?

Вот ваша проблема:

if [[ "$d"=="*.out" && grep "index123"]];

Предположим, что d=foo.out. Теперь мы фактически имеем:

if [[ grep "index123"]];

Итак, вы пытаетесь указать grepискать в стандартном вводе выражение /index123/. Но на него не будет поступать никаких входных данных, так что он (будет казаться )зависшим, ожидая ввода. Однако он даже не зайдет так далеко, потому что if [[ grep "index123" ]]на первый взгляд является недопустимым синтаксисом. Вместо этого вы хотите if grep "index123". Но опять же --, это будет просто ждать стандартного ввода.

Похоже, вы хотите вернуть из findфайлы с именем *.out, которые содержат текст index123. Так что попробуй это:

find. -prune -type d -name \*.out -print0 | xargs -0 grep -l 'index123'

Однако это findутверждение довольно запутанно. Зачем findвсе, а затем обрезать каталоги, когда мы могли бы просто искать нужные нам файлы?

find. -type f -name \*.out -print0 | xargs -0 grep -l 'index123'

Теперь вы увидите все файлы, содержащие искомый текст.

Нам даже не нужно выносить xargsна стол, так как findможет вызвать grepсам по себе:

find. -type f -name \*.out -exec grep -l 'index123' "{}" \;
6
08.08.2020, 18:43
4 ответа

Путем поиска в исходниках я нашел функцию, которую вы ищете, но она была доступна только в коммите, сделанном несколько месяцев назад , поэтому доступна только в яблочко (будущее Debian 11):

Support marking all newly installed packages as automatically installed

Add option '--mark-auto' to 'apt install' that marks all newly installed packages as automatically installed.

Эквивалентным параметром конфигурации (, не имеющим никакого эффекта в Debian 10 ), является APT::Get::Mark-Auto.

7
18.03.2021, 23:14

Вы не можете в apt, но интерактивный режим aptitudeможет это сделать.

Я все же спрашиваю, почему вы хотите это сделать. Автоматически -установленные библиотеки устанавливаются, потому что то, что вы выразили желание установить, нуждается в библиотеке для работы. Попросив aptустановить другую версию библиотеки, вы выражаете желание установить ее. Он больше не является автоматическим -, о котором вы просили, и aptбольше не будет считать его удаляемым при удалении зависимых пакетов.

0
18.03.2021, 23:14

Поскольку мне надоело копировать/вставлять, я написал aptup для простой работы по обновлению определенных пакетов (или выбору из списка обновляемых черезdialog). apt-mark showauto pkg...распечатывает автоматически установленный статус -, который можно восстановить после apt-install.

1
18.03.2021, 23:14

Я столкнулся с этим некоторое время назад, пытаясь установить все из старой установки в новую, используя список пакетов, полученный при запуске dpkg -lв старой системе.

Это удобно, если вы хотите получить все, что у вас было раньше,но не могу вспомнить все, что вы установили за время жизни установленной системы.

Следующий сценарий делает это, пытаясь установить все с помощью функции install_new. Хитрость заключается в том, чтобы сначала запустить dpkg -s package-name. Если он не находит пакет, он возвращает ошибку, чтобы вы знали, что пакет не установлен.

Приведенный ниже сценарий имеет префикс echoперед командой apt, поэтому он будет пробным, пока вы не удалите префикс. Это позволит вам просмотреть, что он будет делать в первую очередь, чтобы вы могли отредактировать список ввода и исключить вещи, которые вы не хотите переносить в новую систему, или перенаправить вывод сценария в файл, чтобы запустить его позже, чтобы выполнить установку.. Это особенно полезно, потому что некоторые «переустановки» могут завершиться неудачей, поэтому вам может потребоваться исправить некоторые вещи и отредактировать файл, чтобы перезапустить его с того места, где вы остановились.

Чтобы использовать сценарий для создания сценария установки, другие echoкоманды в сценарии необходимо закомментировать.

#!/bin/bash

function install_new () {
  if [[ -z "$1" ]]
  then
    echo "install_new called with empty argument"
    rc=1
  else
    dpkg -s "$1" &> /dev/null
    rc=$?
    if (( rc ))
    then
      echo sudo apt-get install "$1"
      rc=$?
    else
      echo -e "\tSkipping [$1] - already installed"
      rc=1
    fi
  fi
  return ${rc}
}

while read package action
do
  echo "Package [${package}] Action [${action}]"
  action="${action:-install}"  ## If action is not present, default to install
  
  case "${action}" in
    # 
    "install")
      install_new "${package}"
    ;;
    #
    *)
      echo -e "\tDon't know how to ${action} ${package}"  
    ;;
  esac

done < "${1}"
1
18.03.2021, 23:14

Теги

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