Я делю свой .bashrc (все мои точечные файлы, на самом деле) между Ubuntu и Archlinux. Поскольку пути могут отличаться между ними, я хотел бы запускать некоторые команды только в Ubuntu (а другие только в Archlinux). Как я могу определить, запускаю ли я Ubuntu внутри файла .bashrc? Обнаружение Debian, вероятно, будет работать.
4 ответа
Результат uname -v
на моей машине содержит "Ubuntu" - Может быть, вы можете использовать это? Тем не менее, более переносимым решением было бы проверить наличие путей вместо этого:
FOO=/path/to/executable
if [ -x "$FOO" ]
then
"$FOO" --option
fi
Это стандартный способ в make-файлах GNU.
Думайте об этом как о разных компьютерах, а не о разных операционных системах:
file=~/.bashrc-$HOSTNAME
if [[ -f $file ]]; then
. "$file"
end
ПЕРЕСМОТРЕНО: оригинальная версия не работает на 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
- 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.
- Если вы не хотите использовать 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 $