Позвольте мне бросить кирпич, чтобы привлечь сюда нефрит.
dnf список всех | less
показывает все пакеты (включая установленные и доступные). Вывод состоит из двух разделов: «Установленные пакеты» и «Доступные пакеты». Всем «Установленным пакетам» предшествует знак @, а «Доступным пакетам» нет. Итак, я считаю, что знаки @
показывают, что пакеты установлены. Если пакет установлен, но его исходное репо было удалено, я полагаю, что отображается знак @@
.
Исходный код dnf размещен по адресу https://github.com/rpm-software-management/dnf . После загрузки кода src выполните команду grep в командной строке -ri.
в каталоге и ничего не возвращает. Однако на его странице на github это упоминается
. Он осуществляет управление пакетами с использованием библиотек RPM, libsolv и hawkey.
Я смотрю на hawkey, который размещен в рамках того же проекта, по адресу https://github.com/rpm-software-management/hawkey . Посмотрите его код с помощью командной строки grep -ri.
, он показывает некоторые результаты.
./src/types.h:#define HY_CMDLINE_REPO_NAME "@commandline"
./hawkey.spec:- fix: commandline RPMs do not provide their files (RhBug:1112810) (Ales Kozumplik)
Итак, командная строка
взята из пакета hawkey
. Что касается вопроса, почему @comandline
отображается в команде dnf list
, я предполагаю, что код dnf
не может правильно использовать hawkey
.
sudo docker images -q nginx
if [ $? -eq 0 ];
then
echo "existing"
else
echo "missing"
fi
$? : Статус выхода. Каждая команда возвращает статус выхода или код выхода, успешная команда возвращает '0', а неудачная возвращает ненулевое значение (диапазон от 1 до 255), которое обычно можно интерпретировать. как код ошибки .
Если контейнер существует, то статус выхода будет 0, иначе он будет 1.
$?
- это не строка, а статус выхода из sudo
(в данном случае). Чтобы использовать его правильно, сравните его с нулем с помощью -gt
или используйте if (( $? ))
(в оболочке типа bash
или ksh93
, которая выполняет арифметическую оценку с помощью (( ... ))
).
Если sudo docker images -q nginx
выдает строку, если контейнер существует, и ничего, если его нет, то вы можете сохранить это в переменной и посмотреть, пуста она или нет:
result=$( sudo docker images -q nginx )
if [[ -n "$result" ]]; then
echo "Container exists"
else
echo "No such container"
fi
Я попробовал docker images -q {Image Name}
, как было предложено в «лучшем ответе», но он вернул только идентификатор изображения, а не контейнера. Независимо от того, запущен контейнер или нет, он всегда возвращает идентификатор изображения.
Если вы хотите узнать, запущен ли КОНТЕЙНЕР, вам нужно применить следующую команду:
docker ps -q -f name={container Name}
Если контейнер существует, возвращается идентификатор контейнера. Пустая строка возвращается, если она остановлена или не существует.