Вот ваша проблема:
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' "{}" \;
Путем поиска в исходниках я нашел функцию, которую вы ищете, но она была доступна только в коммите, сделанном несколько месяцев назад , поэтому доступна только в яблочко (будущее 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
.
Вы не можете в apt
, но интерактивный режим aptitude
может это сделать.
Я все же спрашиваю, почему вы хотите это сделать. Автоматически -установленные библиотеки устанавливаются, потому что то, что вы выразили желание установить, нуждается в библиотеке для работы. Попросив apt
установить другую версию библиотеки, вы выражаете желание установить ее. Он больше не является автоматическим -, о котором вы просили, и apt
больше не будет считать его удаляемым при удалении зависимых пакетов.
Поскольку мне надоело копировать/вставлять, я написал aptup для простой работы по обновлению определенных пакетов (или выбору из списка обновляемых черезdialog
). apt-mark showauto pkg...
распечатывает автоматически установленный статус -, который можно восстановить после apt-install
.
Я столкнулся с этим некоторое время назад, пытаясь установить все из старой установки в новую, используя список пакетов, полученный при запуске 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}"