1

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

4 ответа4

1

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

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

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

1

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

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

ПЕРЕСМОТРЕНО: оригинальная версия не работает на 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
1

  1. lsb_release -i должен дать идентификатор дистрибутива / дистрибьютора напрямую. Например, мы можем сделать
    raub @ desktop: / tmp $ lsb_release -i Идентификатор распространителя: Ubuntu raub @ desktop: / 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 (финальный) ядра \r на \m [raub @ otherdesktop ~] $
    raub @ desktop: / tmp $ cat / etc / issue Ubuntu 16.04.1 LTS \n \l raub @ desktop: / tmp $

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .