Descobrir as incompatibilidades do coreutils entre o Alpine e o Linux “normal” (ex. Ubuntu)

0

Eu lutei com o gitlab não funcional.

Eu precisava limpar a saída do psql removendo alguns não-imprimíveis, descobri o comando:

<psql invoke> | tr -cd [:print:]

Testando-o felizmente localmente (Ubuntu) Confirmei as alterações, mas o pipeline falhou. Depois de algumas tentativas com adição de saída de depuração, fiz o login em docker:latest image (baseado no Alpine) para descobrir que tr no Alpine não suporta classes como [:print:] .

Eu tenho um monte de scripts que invocam o coreutils, e agora todos eles são potencialmente incompatíveis com a Alpine. Como descobrir quais incompatibilites existem entre os coreutils da Alpine e aqueles que formam o Linux normal como o Ubuntu? Quais adaptações precisam ser tomadas para que os scripts de shell sejam executados em ambos?

    
por 9ilsdx 9rvj 0lo 04.10.2017 / 14:04

1 resposta

2

O Ubuntu usa o GNU coreutils. Alpine usa o busybox. O Busybox enfatiza o fornecimento de pequenos executáveis e, portanto, tende a ser muito mais despojado do que os utilitários GNU. A maneira mais confiável de determinar o que funcionará no Alpine seria ler as páginas de manual ou outra documentação do projeto busybox e / ou instalar e testar com o busybox em si. Onde você normalmente digitaria tr , use busybox tr e veja se o resultado é o esperado.

Note que o busybox suporta classes de caracteres no estilo POSIX ( [:upper:] e amigos) mas de acordo com a origem , [:print:] e [:graph:] são "TODO". Somente as seguintes classes são suportadas: alpha , alnum , digit , lower , upper , space , blank , punct , cntrl e xdigit . Observe que a data de copyright no topo da fonte vinculada é 1997. Esta foi a primeira cópia que encontrei; pode ter havido atualizações desde então.

    
por 04.10.2017 / 14:24