Тестирование сценария оболочки через терминальное моделирование

Вы могли сделать две вещи со своим regex относительно расширения типа файла. Вы могли добавить расширения всех заглавных букв непосредственно regex, т.е. (tar|TAR) или можно добавить ?i флаг для создания поиска нечувствительным к регистру. Посмотрите это для руководства: https://stackoverflow.com/questions/43632/can-you-make-just-part-of-a-regex-case-insensitive

Затем относительно завершения многословного вот другой ответ: https://stackoverflow.com/questions/1146098/properly-handling-spaces-and-quotes-in-bash-completion (я лично использую _ вместо пробелов во всех моих файлах поэтому),

1
13.01.2014, 22:01
3 ответа

Как Chris Down сказал в комментариях, обнаруживание распределения является действительно плохим способом обнаружить систему пакета. Например, Вы упомянули "REDHAT + CENTOS + Fedora = rpm+yum поддержка и DEBIAN + UBUNTU = deb+apt-get". Хорошо, что относительно Монетного двора, LMDE, Kali, Отслеживания в обратном порядке, Crashbang и всех других дистрибутивов использование dpkg/apt-get? Или Научный Linux, Желтая Собака Linux и Oracle Linux, все из которых используют yum? Не говоря уже о других ОСНОВАННЫХ НА ОБ/МИН дистрибутивах, которые не используют yum как SuSe, OpenSuSe, Mandriva Linux, Rosa Linux или Mageia?

Намного лучший путь состоял бы в том, чтобы обнаружить инструмент, который Вы хотите использовать. Я также предложил бы, чтобы Вы использовали rpm система непосредственно, а не yum, почему предел самостоятельно 6 ОСНОВАННЫМ НА ОБ/МИН дистрибутивам то использование yum?

Я просто протестировал бы, если система Вы оказываетесь на использовании rpm или dpkg управлять их пакетами:

if [ $(rpm -qa 2>/dev/null | wc -l ) -gt 10 ]; then 
  system="rpm" 
elif [ $(dpkg -l 2>/dev/null | wc -l ) -gt 10 ]; then 
  system="dpkg" 
else 
  system="unk"
fi 
echo $system

С тех пор rpm может быть установлен на dpkg основанные дистрибутивы и наоборот, я тестирую, существует ли больше чем 10 пакетов, установленных с каждым инструментом.

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

2
27.01.2020, 23:28
  • 1
    Мы не хотим поддерживать весь вид Дистрибутивов просто RHEL, Centos & Ubuntu (Fedora все еще не находится в нашем объеме), именно поэтому мы запускаем с этих тестов. –  рüффп 09.01.2014, 14:13
  • 2
    Однако это не отвечает на мой вопрос. Мой вопрос, "Там какой-либо эмулятор терминала, который моделирует различные дистрибутивы?" –  рüффп 09.01.2014, 14:15
  • 3
    @ruffp, если это - все, которое Вы хотите, см. сценарий в ответе, с которым я связываюсь в моем последнем абзаце. Я настоятельно рекомендую не следовать этим маршрутом, хотя, что, если дистрибутив изменяет путь, он настраивает lsb ответ? Если Вы просто проверяете на rpm по сравнению с dpkg Вы будете знать, что сделать. Так или иначе необходимо также проверить файл /etc/os-release который должен присутствовать во всех дистрибутивах, Вы упоминаете. –  terdon♦ 09.01.2014, 14:35
  • 4
    Что касается не ответа на Ваш вопрос, Вы правы, но этот тип вопроса является плохим пригодным для нашего сайта. На самом деле мы обсуждали этот тип запроса на сетевые инструменты здесь. На этом сайте нам нравятся определенные, технические проблемы с определенными техническими ответами. Не вещи, которые можно найти путем поиска с помощью Google. Вы могли бы хотеть спросить относительно нашей Unix & Linux Chat, если кто-либо знает о чем-то, что могло бы помочь Вам. –  terdon♦ 09.01.2014, 14:37
  • 5
    Вы правы способом протестировать присутствие об/мин / dpkg, но Ваш сценарий является немного медленным, я думаю, что можно улучшиться при помощи, которые управляют, чтобы видеть, установлена ли программа. –  рüффп 09.01.2014, 14:44

Python

#!/usr/bin/env python
import platform

"""

Fingerprint the following operating system

        * Mac OS X
        * Ubuntu
        * Red Hat/CentOS
        * FreeBSD
        * SunOS

"""

class OpSysType(object):
        """ Determine OS type using platform module """
        def __getattr__(self,attr):
                if attr == "osx":
                        return "Mac OS X"
                elif attr == "rhel":
                        return "redhat"
                elif attr == "ubu":
                        return "ubuntu"
                elif attr == "fbsd":
                        return "FreeBSD"
                elif attr == "sun":
                        return "SunOS"
                elif attr == "unknown":
                        return "unknown"
                else:
                        raise AttributeError,attr

        def linuxtype(self):
                """ Use various method to determine Linux Type """
                if platform.dist()[0] == self.rhel:
                        return self.rhel
                elif platform.uname()[1] == self.ubu:
                        return self.ubu
                else:
                        return self.unknown

        def queryos(self):
                p = platform.system()
                if p  == "Darwin":
                        return self.osx
                elif p == "Linux":
                        return self.linuxtype()
                elif p == self.sun:
                        return self.sun
                elif p == self.fbsd:
                        return self.fbsd

def fingerprint():
        type = OpSysType()
        print type.queryos()

if __name__ == '__main__':
        fingerprint()
2
27.01.2020, 23:28

Можно легко сделать только с uname:

OS=`uname`
  if [ "$OS" == "Linux" ];then
    distro="Linux"
elif[ "$OS" == "SunOS" ];then
    distro="Solaris"
else
    echo "CRITICAL - Unknown os"
    exit 2
-1
27.01.2020, 23:28
  • 1
    Это не обнаруживает дистрибутив, и так или иначе это не мой исходный вопрос. Мой (плохой) пример состоял в том, чтобы только проиллюстрировать случай. –  рüффп 09.01.2014, 14:17

Теги

Похожие вопросы