Posso usar o .bashrc para fazer ls mostrar cores no OS / X e no Linux?

6

Eu corro OS / X na minha máquina pessoal e Linux nos meus servidores remotos. (Eu nunca poderia pagar um Xserve mesmo quando eles ainda fizeram eles.) Eu adoraria usar o mesmo arquivo .bashrc para ambos e eu quero ter ls me mostrar cores para que eu possa identificar arquivos executáveis, diretórios e o como.

Mas o GNU ls no Linux quer ver a opção de linha de comando --colors ou ele se recusará a mostrar cores. A Apple (BSD?) ls prefere ver a variável export CLICOLORS=1 shell para dizer a ela para mostrar cores.

Eu faria as duas coisas, mas a Apple ls barfs se ela vir um switch --colors desconhecido.

Existe uma boa maneira no .bashrc detectar se o ls aceita um switch e, em seguida, decidir se deve aliasá-lo com --colors ou não?

    
por Brian 03.02.2017 / 03:55

2 respostas

6

Quando você está tentando fazer algo portável, teste os recursos, não as plataformas:

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

Testes de plataforma quebram quando as plataformas mudam. O macOS vem com um mix de ferramentas BSD e GNU userland hoje, mas esse mix é mudando com o tempo para uma maior preponderância de ferramentas BSD. Assim, um teste para "macOS" hoje pode falhar amanhã, quando a Apple substituir uma ferramenta GNU da qual você estava dependendo com o equivalente BSD mais próximo, se você estiver contando com um recurso que os dois implementam de maneira diferente. Os testes de recursos costumam continuar trabalhando em face da mudança.

Como bônus, você às vezes acaba criando suporte para plataformas que você não testou originalmente. O fragmento de script acima também deve fazer a coisa certa no Solaris e no FreeBSD, por exemplo.

(Esta é a filosofia por trás do GNU Autoconf, por falar nisso, e é por isso que um script configure escrito há 10 anos provavelmente ainda funciona em um novo sistema atualmente.)

Modifique os aliases para se adequarem. Estou mostrando apenas os valores que uso nos sistemas macOS e Linux mais próximos à mão enquanto escrevo isso.

    
por 03.02.2017 / 05:02
0

você pode verificar se é linux e, em seguida, definir ls para isso. ou seja:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi
    
por 03.02.2017 / 04:21