Как обнаружить 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
- 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.
- Если вы не хотите использовать 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 $