Когда код состояния бесполезен, есть ли способ построить конвейер на основе вывода из stdout?
Я бы предпочел, чтобы ответ был не на сценарии использования, а на вопросе сценариев оболочки. Я пытаюсь найти наиболее конкретный пакет, доступный в репозитории, угадав имя на основе кодов страны и языка.
Возьмите, к примеру, это,
$PACKAGE1=hunspell-en-zz$PACKAGE2=hunspell-en
Первое предположение более уместно, но оно может не существовать. В этом случае я хочу return hunspell-en( $PACKAGE2), потому что первая опция hunspell-en-zz( $PACKAGE1) не существует.
конвейеры apt-кеша
Команда apt-cacheвозвращает успех (который определяется оболочкой как код выхода ноль) всякий раз, когда команда может быть запущена (из документов apt-cache)
apt-cache возвращает ноль при нормальной работе, десятичное 100 при ошибке.
Это делает использование команды в конвейере более сложным. Обычно я ожидаю, что эквивалент 404 при поиске пакета приведет к ошибке (как это случилось бы с curlили wget). Я хочу выполнить поиск, чтобы увидеть, существует ли пакет, и если нет, использовать другой пакет, если он существует .
Это ничего не возвращает, так как первая команда возвращает успех (поэтому rhs в ||никогда не выполняется)
apt-cache search hunspell-en-zz || apt-cache search hunspell-en
apt-cache search с двумя аргументами
Это ничего не возвращает, поскольку apt-cacheANDs его аргументы,
apt-cache search hunspell-en-zz hunspell-en
Из документов apt-cache
Отдельные аргументы могут использоваться для указания нескольких шаблонов поиска, которые объединяются и объединяются.
Так как один из этих аргументов явно не существует, это ничего не возвращает.
Вопрос
Какова идиома оболочки для обработки соглашений, подобных тем, в apt-cacheкоторых код возврата бесполезен для задачи? А успех определяется только наличием выхода на STDOUT?
Похожий на
потерпеть неудачу, когда ничего не было найдено
они оба вытекают из одной и той же проблемы. Выбранный ответ там упоминает,
find -zчто, к сожалению, не применимо решение здесь и является конкретным вариантом использования. Там нет упоминания об идиоме или построении конвейера без использования нулевого завершения (опция не включенаapt-cache)
hunspell-arсуществуют и пакетов с названиями стран нет. Мне нужно найти наиболее точный пакет для данной страны и языка.
findкак apt-cacheв этом отношении - бесполезный код возврата, успех основан на выводе.
-zчто, к сожалению, это не решение, поэтому проблема, связанная с конкретным случаем, не применима. И нет никакого упоминания об идиоме или построении конвейера без использования нулевого завершения (не apt-cache
findчто он будет использоваться с -print0и, таким образом, grep с -z. Поскольку apt-cache не дает вывод с нулевым символом в конце, вам это не нужно -z.
hunspell-enсуществует? В любом случае, вы можете использоватьapt-cache policyи grep для^$PACKAGENAME:.