Идентификация менеджера по системному пакету

Я предполагаю, что “неанглийским языком обозначает буквами”, Вы имеете в виду буквы кроме 26 неукрашенных букв Латинского алфавита. Затем строго говоря вот тест, который отвечает Вашим требованиям:

if tmp=${WD//[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/};
   [[ $tmp = *[[:alpha:] ]* ]]; then
  # $WD contains letters other than A-Z and a-z or a space

Таким образом, разделите английские буквы и посмотрите, существуют ли какие-либо буквы или оставленные пробелы.

Я подозреваю, что Вы на самом деле стараетесь избегать всех символов неASCII и всего пробела, включая тех, которые не являются буквами такой как ¿ или £ или ٣. Можно сделать это путем соответствия символам, которые не являются ! через ~ (т.е. символы ASCII кроме пробела):

if (LC_ALL=C; [[ $WD = *[^!-~]* ]]) then …

Обратите внимание что диапазоны как !-~ или A-Z не всегда делайте то, что Вы ожидали бы, когда Вы имеете LC_COLLATE набор. Следовательно мы устанавливаем LC_ALL к известному значению (LC_ALL козыри все настройки локали).

Если Вы проверяете на “необычные” символы в файлах (почему еще исключают даже пробелы, которые позволяются на большинстве современных платформ), могло бы иметь смысл иметь более ограниченные списки, который не позволяет непортативных символов. POSIX только позволяет буквы ASCII, цифры и -._.

if (LC_ALL=C; [[ $WD = *[^-._0-9A-Za-z]* ]]) then …

11
22.08.2012, 17:56
2 ответа

Запустите с принятого ответа на этот вопрос: Как я могу получить имя распределения и номер версии в простом сценарии оболочки?. Затем решите, какой диспетчер пакетов Вы хотите использовать на основе обнаруженного распределения.

9
27.01.2020, 19:58
  • 1
    Существует ли легко доступный список диспетчеров пакетов для различных дистрибутивов? Существует много клонов debian в частности. –  DrAl 23.08.2012, 09:58
  • 2
    Не уверенный в легко доступном списке, но всех клонах Debian будет использовать apt-get. –  Jim Paris 23.08.2012, 19:52
  • 3
    Yes, I realise that; my problem is not so much identifying the distribution (although your link will certainly make this easier), it is figuring out how to link a distribution name like (to pick one at random) "SolusOS" with apt without maintaining a list of every distribution that exists. –  DrAl 24.08.2012, 09:49
  • 4
    Сделайте это автоинструменты путь: Проверьте, работает ли это. BTW, что распределение использует склонный, означает, что это - родственник Debian (и они - довольно компактный набор), находя, что конфетка не означает, что упаковочные конвенции (разделение в библиотеку/разработку, один большой кирпич Perl или отдельных пакетов от CPAN...) являются тем же. Даже не пытайтесь установить пакет Fedora на CentOS (существует по крайней мере 3 или 4 года скоса версии, просто не будет работать). –  vonbrand 18.01.2013, 05:28

Вместо определяют программы в двоичном представлении, необходимо запустить с, определяют дистрибутивы,

Просто дайте Вам немного строк, который работает в сценариях удара:

declare -A osInfo;
osInfo[/etc/redhat-release]=yum
osInfo[/etc/arch-release]=pacman
osInfo[/etc/gentoo-release]=emerge
osInfo[/etc/SuSE-release]=zypp
osInfo[/etc/debian_version]=apt-get

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

Althrough этим частям нельзя доверять, но обычно люди, не сделает этого.

8
27.01.2020, 19:58

Теги

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