Если я понимаю Вас правильно, Вы хотите изменить подсказку при запуске текущей команды. Я не думаю, что удар имеет изменяющую подсказку функцию, но можно, возможно, перерисовать по подсказке, если можно определить местоположение его (не настолько легкий для многострочных команд).
В zsh Вы использовали бы precmd
функция. Bash не имеет подобной функции, но он может быть изрублен.
Выполнение uname -a
должен дать Вам немного общей информации о системе. Кроме того, можно работать apropos "package manager"
или с подобными ключевыми словами для обнадеживающего обнаружения больше о диспетчере пакетов. Заглянуть /etc
для названного файла xyz-release
где xyz
должен быть любой дистрибутив, работает.
Проверьте вывод:
lsb_release -a
и:
cat /etc/issue
Можно также проверить на большее количество команд пакета низкого рычага rpm
для Redhat и dpkg
для Debian.
apt-get install lsb-release
если это не установлено.
– Massood Khaari
18.08.2016, 11:23
Если это будет встроенное устройство (например, маршрутизатор Сохо), то это, вероятно, не будет ни один из дистрибутивов "рабочего стола/сервера". Я попытался бы изучить руководство устройства, веб-сайт производителя (должен иметь источник к GPL-лицензированному коду), и сеть в целом.
Для тестирования систем Debian вы можете проверить, существует ли / etc / debian_version
:
if [ -f "/etc/debian_version" ];
#do stuff
fi
Должен быть включен Debian и системы на его основе (включая Ubuntu и его производные), хотя некоторые могут не иметь его - в этом случае вы можете проверить файлы / etc / * release
:
if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
#do stuff
fi
Где debian | buntu | mint
- это список имен дистрибутивов для поиска (без учета регистра) - вы можете получить представление о некоторых распространенных производных от здесь , хотя производные от debian, такие как Ubuntu , имеют свои собственные производные .
Для систем на основе RedHat производные используют больший диапазон файлов и могут не иметь установленного lsb-release, поэтому вы можете применить следующие методы:
lsb_release -i 2> / dev / null | sed 's /: \ t /: /' | cut -d ':' -f 2-
Проверьте DISTRIB-ID в файле lsb-release
- «Резервный метод, который, вероятно, не нужен в современных системах», также файл явно отсутствует в Fedora и не содержит DISTRIB_ID в OpenSUSE
, проверьте наличие некоторых из следующих
/ etc / fedora-release
и / или / etc / redhat-release
для RedHat или Fedora / etc / SuSE-release
для SuSe / etc / mandriva-release
для mandriva / mageia используйте метод, аналогичный последнему debian:
if ["$ (grep -Ei 'fedora | redhat' / etc / * release)"]; затем
...
Первые 3 пункта, которые я получил из cron обновления Google Chrome, чтобы вы могли изучить и его, чтобы узнать больше (он также определяет менеджеры пакетов)
Для более широкого круга ОС, прочтите этот пост на SO должен помочь.
uname -a
иcat /proc/version
(читать -только для суперпользователей ), по моему честному мнению, являются единственными правильными ответами на этот вопрос, так как остальные -, такие как lsb_release
, /etc/issue
или cat /proc/sys/kernel/version
-, являются недоступно/не для использования в каждой системе (и даже в официальных дистрибутивах Debian ). Также не беспокойтесь об использовании /etc/*releases
, /etc/*version
, так как они могут быть изменены. Последний доступен не во всех дистрибутивах Debian.
Возможны другие варианты (не рекомендуется):
dash
или проверьте, связано ли sh
с dash
(, оно должно использоваться по умолчанию для запуска скриптов)>/dev/null 2>&1 dpkg --version && {... }