Вы могли сделать две вещи со своим 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 (я лично использую _ вместо пробелов во всех моих файлах поэтому),
Как 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 пакетов, установленных с каждым инструментом.
Для лучшего способа обнаружить фактическое распределение видят принятый ответ здесь, который должен дать Вам общее представление о том, насколько сложный это. Вы действительно хотите записать определенные для дистрибутива тесты для десятков дистрибутивов, когда Вы могли легко просто обнаружить упаковочную систему, используемую вместо этого?
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()
Можно легко сделать только с uname:
OS=`uname`
if [ "$OS" == "Linux" ];then
distro="Linux"
elif[ "$OS" == "SunOS" ];then
distro="Solaris"
else
echo "CRITICAL - Unknown os"
exit 2
lsb
ответ? Если Вы просто проверяете наrpm
по сравнению сdpkg
Вы будете знать, что сделать. Так или иначе необходимо также проверить файл/etc/os-release
который должен присутствовать во всех дистрибутивах, Вы упоминаете. – terdon♦ 09.01.2014, 14:35