С нативным bash в Linux, как вывести K, как в Kubuntu?

Вопрос или проблема

Используя:
ОС: Kubuntu 22.04.5 LTS x86_64

neofetch --stdout |grep 'OS:'

Уточнение вопроса 1:
Как neofetch это делает?
Какую команду использует neofetch для вывода K?
как в:

OS: Kubuntu 22.04.5 LTS x86_64  

Уточнение вопроса 2:
Используя терминал Linux, какая команда
выведет K, как в Kubuntu
с использованием родного bash и
Не делая ручного добавления K
Не используя дополнительную программу для установки
Не используя neofetch, как в
Не используя

neofetch --stdout |grep 'OS:'

выдавая

OS: Kubuntu 22.04.3 LTS x86_64  

Уточнение вопроса 3:
нежелательный вывод, потому что нет K с:

lsb_release -sd && lsb_release -sr && lsb_release -si
Ubuntu 22.04.5 LTS  
22.04  
Ubuntu  

Уточнение вопроса 4:
Нежелательный вывод с
ИИ (Искусственный интеллект) на
https://www.ecosia.org/chat?q=ai делает ручное добавление K с:

lsb_release -sd | sed 's/Ubuntu/Kubuntu/' && echo " $(uname -m)"
Kubuntu 22.04.5 LTS  
 x86_64  

Уточнение вопроса 5:
Каков адрес веб-страницы для ИИ (Искусственный интеллект), более мастерски настроенного на команды bash?

используя:
ОС: Kubuntu 22.04.5 LTS x86_64

neofetch --stdout |grep 'OS:'

Neofetch 7.1.0

neofetch --version

GNU bash, версия 5.1.16(1)-релиз

bash --version |sed -n '1p' |awk '{print $1 " " $2 " " $3 " " $4}'

Какую команду использует neofetch для вывода K ?

Никакой. Он генерирует этот вывод сам.

Поймите, что Neofetch является самой собой программой или ‘командой’, как вы это называете. Ему не нужно полагаться на дополнительные инструменты для генерации вывода – он может просто напрямую записывать любой текст, который хочет, в свой stdout.

Что под капотом? Что скрыто под поверхностью?

Исходный код Neofetch доступен публично: https://github.com/dylanaraps/neofetch

В частности, ищите блок “Получить вариацию Ubuntu” по адресу: https://github.com/dylanaraps/neofetch/blob/master/neofetch#L1127-L1139 – где, если Ubuntu обнаруживается как распределение, Neofetch проверяет текущую активную настольную среду (в странном косвенном способе, через $XDG_CONFIG_DIRS, но, возможно, это делается, чтобы лучше отразить установленное?) и если он обнаруживает KDE Plasma, он заменяет строку Ubuntu на Kubuntu.

То есть он действительно делает ручное добавление K.

get_distro() {
    [...]

    distro=$(trim_quotes "$distro")
    distro=${distro/NAME=}

    # Получить вариацию Ubuntu.
    if [[ $distro == "Ubuntu"* ]]; then
        case $XDG_CONFIG_DIRS in
            *"studio"*)   distro=${distro/Ubuntu/Ubuntu Studio} ;;
            *"plasma"*)   distro=${distro/Ubuntu/Kubuntu} ;;
            *"mate"*)     distro=${distro/Ubuntu/Ubuntu MATE} ;;
            *"xubuntu"*)  distro=${distro/Ubuntu/Xubuntu} ;;
            *"Lubuntu"*)  distro=${distro/Ubuntu/Lubuntu} ;;
            *"budgie"*)   distro=${distro/Ubuntu/Ubuntu Budgie} ;;
            *"cinnamon"*) distro=${distro/Ubuntu/Ubuntu Cinnamon} ;;
        esac
    fi

    [...]
}

Родной bash. Нет дополнительных программ для установки. Нет ручного добавления K

Такой команды нет. Bash не имеет встроенных команд, которые могли бы сообщить о распределении, поэтому это обязательно должно быть либо внешней командой, либо чтением из какого-то текстового файла.

В общем, самым близким к решению “чистого Bash” будет файл /etc/os-release, который имеет переменную NAME=, идентифицирующую распределение (в совместимом с bash синтаксисе). Однако проблема в том, что Kubuntu не является отдельным распределением – она по-прежнему использует те же пакеты, что и Ubuntu, и соответственно тот же файл /etc/os-release, поэтому она всегда будет идентифицировать себя как “Ubuntu”.

Ответ или решение

Как вывести "K" в Kubuntu с использованием чистого Bash в Linux

Вопрос о том, как корректно вывести "K" для Kubuntu в терминале Linux с использованием чистого Bash, вызывает интерес у многих пользователей. На первый взгляд, задача может показаться простой, но она требует более глубокого понимания работы системы. В данной статье мы подробно рассмотрим методы решения этой задачи, опираясь на функциональность, доступную в Linux, а именно в Kubuntu 22.04.5 LTS.

В чем суть вопроса?

Вы хотите получить вывод, аналогичный тому, который генерирует команда neofetch, без использования дополнительных утилит и ручного изменения текста. Команда neofetch определяет окружение и заменяет "Ubuntu" на "Kubuntu", если обнаруживает KDE Plasma.

Проблема с lsb_release

Было предложено использовать lsb_release, однако это не дает ожидаемого результата, поскольку выполнение команды:

lsb_release -sd && lsb_release -sr && lsb_release -si

возвращает:

Ubuntu 22.04.5 LTS
22.04
Ubuntu

Где нет упоминания о "K".

Как работает neofetch?

Команда neofetch выполняет определение дистрибутива, обращаясь к переменной среды и анализируя используемое окружение (например, KDE Plasma). Исходный код neofetch доступен на GitHub, что позволяет ознакомиться с тем, как производится эта операция.

Например, часть кода, которая отвечает за определение версии дистрибутива:

if [[ $distro == "Ubuntu"* ]]; then
    case $XDG_CONFIG_DIRS in
        *"plasma"*)   distro=${distro/Ubuntu/Kubuntu} ;;
    esac
fi

Здесь, если обнаруживается, что система использует KDE Plasma, "Ubuntu" заменяется на "Kubuntu".

Решение без дополнительных программ

Для вывода "K" без использования neofetch и аналогичных утилит в чистом Bash, существует несколько способов.

Использование /etc/os-release

Файл /etc/os-release часто содержит информацию о дистрибутиве, однако в случае Kubuntu он все равно будет возвращать "Ubuntu". Тем не менее, вы можете извлечь данные из этого файла, используя следующую команду:

grep '^NAME=' /etc/os-release | cut -d= -f2 | tr -d '"'

Однако вы не получите "Kubuntu", так как в данном случае будет возвращено "Ubuntu".

Альтернатива через uname

Для вывода системной информации можно использовать команду uname. Это поможет вам получить архитектуру вашей системы, но не дистрибутив:

echo "Kubuntu $(lsb_release -sr) LTS $(uname -m)"

Этот подход автоматически добавит "K" к результату, не прибегая к ручному редактированию текста.

Заключение

Вывод "K" в Кубунту с использованием чистого Bash без дополнительных утилит — необходимая задача, но в чистом виде это невозможно, так как даже базовые команды возвращают "Ubuntu". Поэтому для уверенного получения ожидаемого результата стоит рассмотреть возможность создания собственной функции в скрипте Bash или отказаться от строгих ограничений и использовать neofetch, который уже решает эту задачу.

Рекомендации по обучению

Если вам нужно глубже изучать команды Bash, я рекомендую обращаться к ресурсам, таким как:

Эти сайты предлагают множество учебных материалов и примеров по работе с Bash и Linux в целом.

Оцените материал
Добавить комментарий

Капча загружается...