Как обнаружить Ubuntu в общем Bashrc?

Я делю свой.bashrc (все мои точечные файлы, на самом деле) между Ubuntu и Archlinux. Поскольку пути могут отличаться между ними, я хотел бы запускать некоторые команды только в Ubuntu (а другие только в Archlinux). Как я могу определить, запускаю ли я Ubuntu внутри файла.bashrc? Обнаружение Debian, вероятно, будет работать.

4 ответа

Решение

Результат uname -v на моей машине содержится "Ubuntu" - Может быть, вы можете использовать это? Тем не менее, более переносимым решением было бы проверить наличие путей вместо этого:

FOO=/path/to/executable
if [ -x "$FOO" ]
then
    "$FOO" --option
fi

Это стандартный способ в сборочных файлах GNU.

ПЕРЕСМОТРЕНО: оригинальная версия не работает на Ubuntu 10.04, которая не упоминает Ubuntu в uname -v. Файл /etc/lsb-release намного лучше для этой цели, поскольку в нем есть явная строка DISTRIB_ID, установленная в Ubuntu.

Основываясь на ответе l0b0, этот скрипт sh обнаруживает Ubuntu с помощью оператора if. Как уже отмечали другие, в зависимости от того, что вы делаете, может быть более уместно обнаруживать определенные программы или функции, но как человек, который написал установщики, специфичные для Ubuntu, я ценю, что иногда простой тест на дым, что кто-то не использует их, все, что ты хочешь.

#!/bin/sh

UBUNTU=`grep -i ubuntu /etc/lsb-release | wc -l`
if [ "$UBUNTU" != "0" ] ; then
  echo "This is so totally Ubuntu!"
fi

Думайте об этом как о разных компьютерах, а не о разных операционных системах:

file=~/.bashrc-$HOSTNAME
if [[ -f $file ]]; then
    . "$file"
end

  1. lsb_release -i должен дать идентификатор дистрибутива / дистрибьютора напрямую. Например, мы можем сделать

     raub@desktop:/tmp$ lsb_release -i
    Идентификатор распространителя: Ubuntu
    Raub @ рабочий стол: / TMP $ 

    в коробке с убунту или

    [raub@otherdesktop ~]$ lsb_release -i
    Distributor ID: CentOS
    [raub@otherdesktop ~]$ 
    

    в коробке с центосом Тогда вы можете сделать более интересные вещи, такие как

    raub@desktop:/tmp$ lsb_release -i | awk '{ print $3}' | tr 'A-Z' 'a-z'
    ubuntu
    raub@desktop:/tmp$
    

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

  2. Если вы не хотите использовать lsb_release, попробуйте / etc / issue

     [raub @ otherdesktop ~] $ cat / etc / issue
    CentOS релиз 6.8 (финал)
    Ядро на м
    
    [raub @ otherdesktop ~] $ 
     raub @ desktop: / tmp $ cat / etc / issue
    Ubuntu 16.04.1 LTS \ n \ l
    
    Raub @ рабочий стол: / TMP $ 

Другие вопросы по тегам