Lixeira do código com if
declarações para executar um switch no tipo de coreutils funciona, no entanto, a solução de programação limpa para lidar com diferentes tipos é usar polimorfismo . Como esse é o Bash, não temos polimorfismo em si, mas ando brincando com um jeito de fingir. O único requisito é que o seu arquivo .bashrc
seja organizado em funções.
Primeiro, crio um teste para o tipo de plataforma coreutils :
get_coreutils_platform() {
local ls_version="$(ls --version 2>/dev/null)"
if [[ "$ls_version" == *"GNU coreutils"* ]]; then
echo gnu
else
echo bsd
fi
}
Em seguida, podemos enviar com base no tipo:
platform=$(get_coreutils_platform)
define_standard_aliases_$platform
configure_shell_vars_$platform
Aqui está a implementação do BSD :
define_standard_aliases_bsd() {
define_standard_aliases
}
configure_shell_vars_bsd() {
configure_shell_vars
export CLICOLOR=1
}
(Observe que usamos a variável CLICOLOR
para ativar cores em vez de usar um alias
, que parece um limpador menor)
E a impelementação do GNU :
define_standard_aliases_gnu() {
define_standard_aliases
alias ls='ls --color=auto'
}
configure_shell_vars_gnu() {
configure_shell_vars
}
Para fins de integralidade, aqui está uma implementação de exemplo da "base abstrata":
define_standard_aliases() {
alias ll='ls -l'
alias l.='ls -d .*'
}
configure_shell_vars() {
export EDITOR=vim
}