Como detectar o Ubuntu em um bashrc compartilhado?

1

Eu compartilho meu .bashrc (todos os meus dotfiles, na verdade) entre o Ubuntu e o Archlinux. Como os caminhos podem variar entre eles, eu gostaria de executar alguns comandos apenas no Ubuntu (e outros somente no archlinux). Como posso detectar se estou executando o Ubuntu dentro do arquivo .bashrc? Detectar o Debian provavelmente funcionará.

    
por Capi Etheriel 10.03.2011 / 15:40

4 respostas

1

O resultado de uname -v na minha máquina contém "Ubuntu" - Talvez você possa usar isso? No entanto, uma solução mais portátil seria verificar a existência dos caminhos:

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

Esta é a maneira padrão nos makefiles do GNU.

    
por 10.03.2011 / 15:45
1

Pense nisso como computadores diferentes, não sistemas operacionais :

file=~/.bashrc-$HOSTNAME
if [[ -f $file ]]; then
    . "$file"
end
    
por 11.03.2011 / 11:18
1

REVISADO: a versão original não funciona no Ubuntu 10.04 que não menciona o Ubuntu no uname -v. O arquivo / etc / lsb-release é muito melhor para este propósito, pois tem uma linha DISTRIB_ID explícita definida para o Ubuntu.

Baseado na resposta do l0b0, este script sh detecta o Ubuntu com uma declaração if. Como outros apontaram, dependendo do que você está fazendo, pode ser mais apropriado detectar determinados programas ou recursos, mas como alguém que tenha escrito instaladores específicos do Ubuntu eu aprecio que às vezes um teste de fumaça simples que alguém não está aplicando mal é tudo que você quer.

#!/bin/sh

UBUNTU='grep -i ubuntu /etc/lsb-release | wc -l'
if [ "$UBUNTU" != "0" ] ; then
  echo "This is so totally Ubuntu!"
fi
    
por 08.04.2012 / 19:52
1

  1. lsb_release -i deve fornecer o ID da distribuição / distribuidor diretamente. Por exemplo, podemos fazer
    raub@desktop:/tmp$ lsb_release -i
    Distributor ID: Ubuntu
    raub@desktop:/tmp$ 

    em uma caixa Ubuntu ou

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

    em uma caixa centos. Então você pode fazer coisas mais interessantes como

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

    , que pode ser adicionado a uma variável e usado em outro lugar, como o exemplo de user1179239.

  2. Se você não quiser usar o lsb_release, tente / etc / issue
    [raub@otherdesktop ~]$ cat /etc/issue
    CentOS release 6.8 (Final)
    Kernel \r on an \m
    
    [raub@otherdesktop ~]$
    raub@desktop:/tmp$ cat /etc/issue
    Ubuntu 16.04.1 LTS \n \l
    
    raub@desktop:/tmp$

por 17.02.2017 / 14:14