Coprocessos em Bash – parte 2

coproc-2_abertura

Na primeira parte o coprocesso foi tanto definido com também utilizado para a leitura de forma assíncrona da saída do comando tail mas até o momento foi apenas o monólogo com um programa enviando regularmente linhas de texto a serem impressas na tela. Nesta parte algo mais bidirecional com troca de dados com o coprocesso, uso de uma variável diferente de COPROC e, claro, mais algumas explicações. 🙂

Continuar lendo

Anúncios

Coprocessos em Bash – parte 1

coproc-1_abertura

Quando você executa um programa, pela linha de comando ou a partir de um script, o Bash se encarrega de executá-lo, aguardar a execução terminar, verificar se ela foi bem sucedida¹ e, sendo o caso, direcionar o resultado para a tela, arquivo etc…

No coprocesso² acontece algo diferente; já que o Bash o deixará executando em segundo plano e ao mesmo tempo redirecionará as entrada e saída padrão dele para descritores de arquivo que funcionarão como um canal de comunicação entre eles. É um recurso poderoso e ao mesmo tempo simples de implementar.

E nesta primeira parte, além de uma rápida introdução, a leitura da saída de um programa através de um coprocesso.

(¹) Ou em caso de erro notificar o corrido ou então desviar a execução para algum tratamento de exceções.

(²) Não inventei este nome! Eles são chamados assim mesmo pela documentação do Bash.

Continuar lendo

Controle de jobs nos scripts em Bash

controle_jobs-2_abertura

No final do controle de jobs do Bash citei de dois comandos que fazem parte do controle de jobs do Bash mas que agem dentro dos scripts, não dei maiores detalhes mas prometi falar deles em outra oportunidade. São o suspend (que pausa a execução da shell) e o wait (que faz a shell aguardar o término de sub processos antes de prosseguir com a execução).

E, sim, esta é a “outra oportunidade”! 🙂

Continuar lendo

Controle de jobs do Bash

controle_jobs-1_abertura

O sistema de controle de jobs do Bash — ou de outra shell padrão POSIX — consiste de um recurso que permite de forma seletiva tanto suspender como restaurar a execução de processos em um sistema. Ele é implementado em conjunto pelo kernel do sistema operacional (mecanismos de controle) e o Bash (interface com o usuário) e antes do surgimento/popularização do console virtual¹, screen, Xterm etc, era a forma de se executar facilmente mais de um programa em um terminal UNIX.

E, claro, ainda continua sendo um recurso muito útil, principalmente quando o único acesso que se tem ao host é via SSH e sem privilégios para instalar o byobu… 🙂

(¹) Por exemplo, me recordo que o BSD/OS possuía somente um console em modo texto.

Continuar lendo

Modificando commits do Git

amend-1_abertura.png

Na parte 6 do “Usando o Git”, recorri ao git rebase (em modo interativo) para faz a alateração da mensagem de um commit pré existente. Porém esta tanto não é a única funcionalidade do rebase¹ como ainda há um modo bem mais simples de fazê-lo.

E que não serve somente para alterar a mensagem, com o uso do parâmetro ‐‐amend (emenda) do git commit é possível adicionar, editar ou mesmo remover arquivos dentro de um commit já existente.

(¹) Relembrando que o rebase permite coisas como descartar ou mesclar commits.

Continuar lendo

Usando o Git – parte 6

git-6_abertura

A parte anterior consistiu basicamente em um navegar pelo histórico dos commits com recolocando a HEAD em outros posições e até mesmo destacando-a da linha do tempo para testar modificações sem necessariamente precisar armazená-las. Para esta parte, o uso do stash para armazenar temporariamente arquivos de trabalho e um exemplo do uso do rebase para modificar um commit já existente — neste caso alterar a mensagem deste.

Continuar lendo