Série Tela Preta: Aprenda o “jeito shell script” de resolver problemas

por Aurelio Jargas


Curta o vídeo em tela cheia!

Tela Preta é a minha série de vídeos nerds gravados na linha de comando do Unix, demonstrando o “jeito shell script” de resolver problemas. Todos os vídeos contam com narração e legendas em português, estão em alta resolução (HD) e são reais: sem ensaio, sem cortes, sem edição posterior. Assine meu canal lá no YouTube para ser notificado(a) quando sair um vídeo novo.

Os vídeos que mais gosto de fazer são os de linha de comando. Somente a tela preta, o prompt ali piscando e os comandos que vão surgindo um atrás do outro. Este é o ambiente que mais me sinto à vontade, então posso gravar bem relaxado, sem medo de errar.

Os vídeos

O jeito mais prático de ver os vídeos é abrir a playlist no YouTube.

Mas se preferir, aqui está a lista completa de todos os episódios, com links para o vídeo no YouTube e para o post no blog onde explico melhor os comandos utilizados em cada vídeo:

  1. Datar JPG com data da foto (EXIF) em shell script (exiftool touch grep cut tr sed)
    Blog, YouTube
    15/05/2010
  2. Extrair tag de arquivo XML com shell script (grep sed sort uniq expand)
    Blog, YouTube
    19/04/2011
  3. Otimizar imagens com shell script e Smush.it (find sed grep sh pbcopy)
    Blog, YouTube
    02/09/2011
  4. Extrair dados de arquivo texto com shell script (grep cut sed tr)
    Blog, YouTube
    11/04/2012
  5. Dividir arquivo a cada N linhas com shell script (split paste sed)
    Blog, YouTube
    10/05/2012
  6. Sorteio no Facebook com shell script (grep cut sed $RANDOM)
    Blog, YouTube
    10/05/2013
  7. Editar database do WordPress com shell script, CSV→SQL (tr cut paste sed expand)
    Blog, YouTube
    22/03/2014
  8. Trocar a extensão de arquivos com shell script (find sed sh)
    Blog, YouTube
    06/06/2015
  9. Contar palavras com shell script (egrep sort uniq)
    Blog, YouTube
    09/08/2016

O jeito shell script

Sou programador, então estou acostumado a usar loops, condicionais e algoritmos para resolver problemas. Porém, a linha de comando é um outro mundo, com suas próprias regras e ferramentas, então é preciso enxergar seus problemas de maneira diferente para poder resolvê-los com facilidade neste ambiente.

À sua disposição estão a shell, pipes, redirecionamento, expansão de globs e variáveis, e claro, os comandos do Unix e suas opções.

Este ambiente é especialmente poderoso para manipular texto. Se você conseguir transformar o seu problema atual em um problema de texto, a solução sairá naturalmente na linha de comando. O ideal é que o fluxo seja: entra texto, sai texto, ou seja, você começa com um texto de início, o manipula com as ferramentas do Unix, e o resultado é um novo texto.

O episódio 7 ilustra bem essa diferença de pensamento:

Mas como usar a zzarrumacidade (um programa que está em meu computador) para arrumar os dados que estão dentro do banco de dados do WordPress (uma entidade que está lá no servidor)?

Pensamento conservador: fazer um programa em Python que conecta no banco de dados, puxa os dados, faz um loop nos resultados, executa a zzarrumacidade, captura o resultado, salva de volta no banco os dados corrigidos.

Pensamento shell script: transformar meu problema num problema de texto, ou seja, entra texto, sai texto. Faço um dump dos dados pra um arquivo CSV, manipulo o texto desse arquivo pela linha de comando arrumando os nomes das cidades e como resultado gerarei um texto com os comandos SQL que vão atualizar os dados no banco. Sem loops, sem complexidade, apenas a boa e velha manipulação de texto.

Características da série Tela Preta

  • Vídeos em alta definição (HD): Porque a linha de comando merece brilhar em alta definição. Experimente ver o vídeo em tela cheia, na sua TVzona da sala, é massa!

  • Sem cortes, sem edição: Os vídeos são gravados “ao vivo”, sem cortes. Eu aperto o botão de gravar e só desligo no final do vídeo. Não há pausas, não há edição posterior. Cada vídeo é uma sessão completa de shell, em tempo real, sem fru-fru e sem trapaças. Às vezes eu erro, às vezes esqueço de algo. Está tudo lá no vídeo. É como se você estivesse aqui na cadeira ao lado, acompanhando tudo.

  • Prompt otimizado: Já tentei vários formatos diferentes de prompt em meus vídeos, mas acho que agora consegui criar um que é ideal para esse tipo de vídeoaula na linha de comando. A linha separadora na cor verde deixa claro onde terminou a saída do comando anterior. O prompt simples ▶, também em verde e sem nenhuma informação adicional (username, path, …) chama a atenção e não distrai, deixando que os comandos brilhem sozinhos.

    Ficou curioso(a) como faz esse prompt? É bem simples, na verdade. Os hífens são colocados na quantidade exata para encher o tamanho da janela. Depois vem uma quebra de linha \n e o triângulo, que é um caractere Unicode. Assim:

    PS1='----------------------------------------\n▶ '
    

    As cores você pode colocar com caracteres ANSI, veja referência no Canivete Suíço do Shell:

    PS1='\[\e[32;1m\]----------------------------------------\n▶ \[\e[m\]'
    

    Se preferir algo mais sofisticado, que calcule o tamanho da janela automaticamente, dá pra fazer mágica usando o tput e o printf.

    PROMPT_COMMAND='printf "%-$(tput cols)s" - | tr " " -'
    PS1='▶ '
    
  • Legendas em português: As legendas são muito importantes para quem tem problemas de audição, quem não domina o português, ou quem simplesmente não pode habilitar o áudio no momento. Todos os vídeos desta série são totalmente legendados (eu que faço, não é a legenda automática). Também deixo livre a parte de baixo da tela, para que as legendas não sobreponham os comandos.

  • Identidade visual: Os vídeos da série possuem uma identidade visual consistente, para que você possa identificá-los facilmente. Os nomes são padronizados e a capa de cada vídeo é uma tela toda preta que traz o comando utilizado e o número do episódio (bem grande, numa “moedinha” estilo Super Mario). Levei hoooooras pra chegar nesse formato. Aurelio designer é muito ineficiente.

  • Playlist do YouTube: Esta série conta com uma playlist própria, que serve para agrupar todos os vídeos em um único lugar, além de aparecer aquela interface bacana no YouTube para você poder ver todos os vídeos em sequência.

Infelizmente, os vídeos mais antigos (os primeiros da série) não contam com todas as características dos mais recentes. Foi um processo de evolução até chegar no formato atual.

Meu ajude!

Assine o canal, deixe um comentário, dê um “curtir”, compartilhe, me demonstre de alguma maneira que você se importa. Sem público, não tem sentido continuar gravando.

— EOF —