O GitHub muda repetidamente todos os leads de espaços para guias e execuções remotas de scripts (curl) falham

1

Por padrão, o GitHub converte automaticamente todos os leads de guias em espaços quando você edita novamente um arquivo com guias principais: ou seja, se você editar um arquivo, alterando todos os leads de espaços para tabulações, ele será salvo dessa maneira. mas se você editar novamente o arquivo e salvar (sem alterar os leads), todos os leads serão convertidos automaticamente de volta para espaços.

1) Modo de edição de arquivo antes de salvar as alterações:

2)Editeoarquivodepoisdesalvarasalterações:

Notecomoelevoltoudeabas(4)paraespaços(2),justamentequandovimparareeditaroarquivo.

Porqueissoéumproblema

Execuçãodeversõesrawdescriptsremotoscomcurl,contendodadosdependentesdeguias(como here-documents ), irá falhar. Sua execução irá quebrar com algum erro porque eles devem conter guias principais e não espaços.

Esse é o padrão básico de curl que eu uso para executar scripts remotos do GitHub é o seguinte ( Para vários enrolar, este .

:

curl -s URL | tr -d '\r' | bash

Minha pergunta

Existe uma maneira (provavelmente com tr ) de alterar todos os espaços iniciais em abas, para ter certeza de que os scripts remotos que eu executo no GitHub sempre terão abas de líderes ao invés de espaços, não afetados por esse estranho comportamento do GitHub?

    
por user9303970 10.02.2018 / 11:00

1 resposta

2

Eu não posso falar muito sobre o GitHub e seu editor, já que nunca edito arquivos do GitHub diretamente na interface web.

Os utilitários padrão expand e unexpand pode ser usado para converter guias principais em espaços ( expand ) ou espaços iniciais em guias ( unexpand ).

Para alterar os dois espaços iniciais em uma guia (ou quatro espaços em duas guias, etc.), use

unexpand -t 2 file

Isso também pode ser usado como um filtro como em

somecommand | unexpand -t 2

Para substituir qualquer número de espaços iniciais por uma única guia, também é possível usar o GNU sed da seguinte forma:

sed 's/^  */\t/'

O padrão é ^ * com dois espaços entre o ^ e o * . Essa expressão regular corresponderá a um ou mais espaços iniciais (equivalente a ^ + ou ^ {1,} se estiver usando o GNU sed com -r ou -E ). A substituição sed do GNU irá substituí-los por uma guia (outras implementações de sed precisarão de um caractere de tabulação literal na peça de substituição, em vez de \t ).

Estou percebendo que isso não funcionará no OpenBSD, pois sua implementação de unexpand assume oito espaços por guia e não reconhecerá o -t flag. A sugestão acima funciona com unexpand como encontrado no GNU coreutils.

    
por 10.02.2018 / 13:03