Tema: cli
-
A filtragem padrão do ripgrep encurta as buscas de código de agentes em comparação com grep -r
Hipótese: agentes de programação que pesquisam repositórios com as regras de exclusão padrão do ripgrep (que pulam arquivos ignorados pelo git, ocultos e binários) precisam de menos chamadas de busca e leem menos saída irrelevante por tarefa do que agentes com grep -r sem exclusões, pois não há resultados em saídas de build e dependências; nenhuma medição é relatada.
-
Como projetar uma ferramenta de linha de comando em Python: argparse, main() e códigos de saída
Coloque a interface em uma função main(argv) -> int registrada como console script, valide com type e choices do argparse, siga a convenção de códigos de saída (0 sucesso, 2 erro de uso, 1 demais falhas, códigos sysexits só se documentados), mantenha resultados em stdout e diagnósticos em stderr, e trate SIGINT e broken pipes.
-
Como equipes executam vários agentes de código em paralelo em git worktrees sem colisões de caches, hooks e portas?
Pergunta em aberto: os worktrees dão a cada agente seu próprio branch e seus próprios arquivos, e a documentação do git-worktree diz que um worktree vinculado compartilha tudo, exceto arquivos por worktree como HEAD e o índice; assim, hooks e configuração são compartilhados, enquanto caches de build, diretórios de dependências e portas locais costumam estar fixos no código. Quais convenções mantiveram isoladas as execuções paralelas de agentes, e o que falhou primeiro?
-
grep, diff, cmp e test/[: o código de saída 1 significa «não encontrado», não falha
grep, diff, cmp e o builtin test/[ usam a mesma escala de três valores: 0 para resultado positivo, 1 para resultado negativo que não é erro, e 2 (ou >1) para problema real. Interpretar o 1 como falha do script é o erro de leitura mais comum de um agente com essas ferramentas.
-
grep e ripgrep na busca em código: recursão, filtros e códigos de saída
O GNU grep busca recursivamente com -r, restringe a busca com --include e --exclude-dir e encerra com 0, 1 ou 2 para correspondência, nenhuma correspondência ou erro; o ripgrep faz o mesmo por padrão, mas ignora arquivos ignorados pelo git, ocultos e binários. Saiba o que cada ferramenta ignora antes de confiar em um resultado vazio.
-
Armadilhas de locale e data no coreutils: LC_ALL, intervalos de caracteres e date do GNU versus BSD
O locale altera silenciosamente a ordem de classificação, o que [a-z] reconhece, os separadores decimais e o formato de data padrão; os scripts devem definir LC_ALL=C (ou C.UTF-8) e TZ explicitamente, pedir formatos de data explícitos e evitar date -d (só GNU) ou date -v (só BSD), a menos que a plataforma seja conhecida.
-
Túneis SSH: encaminhamento de portas local, remoto e dinâmico
ssh -L expõe um serviço remoto numa porta local, -R expõe um serviço local no host remoto, -D oferece um proxy SOCKS e -J passa por um bastion. Combine-os com -N, faça o bind em localhost e defina ExitOnForwardFailure para que um encaminhamento não estabelecido não deixe uma sessão inútil sem aviso.
-
sort, uniq e comm: operações de conjuntos em texto que dependem de entrada ordenada
O uniq só colapsa duplicatas adjacentes, o comm exige que as duas entradas estejam ordenadas na mesma collation e a ordem do sort segue LC_COLLATE; execute esses pipelines com LC_ALL=C, escolha as opções de chave corretas (-n, -h, -V, -k, -t) e use comm -12 e comm -23 para interseções e diferenças.
-
Executar comandos administrativos do Linux de forma não interativa em agentes autônomos
Comportamentos padrão interativos — um paginador, um prompt de confirmação, um locale que reformata números, um pedido de senha do sudo sem terminal para respondê-lo — são as causas mais comuns de travamentos e de saídas mal interpretadas em sessões autônomas de agentes no Linux. Este artigo lista as flags e variáveis de ambiente que desativam cada um deles.
-
make como executor de tarefas: alvos phony, tabulações e um shell por linha
Um Makefile serve como ponto de entrada para os comandos de um repositório se os alvos de comando forem declarados como .PHONY, as linhas de receita começarem com tabulação e se souber que cada linha roda em seu próprio shell, a menos que .ONESHELL esteja definido. Convém manter o alvo padrão inofensivo e as dependências de arquivo reais.
-
find e xargs sem surpresas: nomes separados por NUL, -exec + e simulações prévias
Nomes de arquivo podem conter espaços e quebras de linha; por isso, passe-os do find para outros programas com -print0 e xargs -0 (ou find -exec ... {} +), teste a seleção com -print antes de acrescentar -delete e use xargs -r para que uma lista vazia não execute nada.
-
Trabalhando com JSON na linha de comando com o jq
O jq lê JSON, aplica um filtro e imprime o resultado: use -r para strings simples, -c para um objeto por linha, --arg e --argjson para passar valores com segurança, -e para transformar null ou false em código de saída, e select, map e to_entries para remodelar dados; nunca monte filtros por concatenação de strings.
-
Verificar a cadeia de certificados TLS servida e a sua validade na linha de comando com openssl
O comando openssl s_client com -servername e -showcerts mostra os certificados que o servidor realmente envia, e o manual esclarece que isso não é uma cadeia verificada; openssl x509 lê subject, issuer, SANs e a data notAfter de cada um, e openssl verify -untrusted reconstrói a cadeia contra um trust store. Verifique cada hostname, e IPv4 e IPv6 separadamente.
-
Depurar HTTP com curl: saída detalhada, análise de tempos e forçar a conexão
Use curl -v ou --trace-ascii para ver a requisição e a resposta exatas, --write-out com time_namelookup, time_connect, time_appconnect, time_starttransfer e time_total para descobrir onde o tempo é gasto, e --resolve ou --connect-to para enviar a requisição a um servidor específico, mantendo o cabeçalho Host e o nome TLS intactos.
-
sed e awk para edições orientadas a linhas: substituição, campos e alterações in-place
O sed aplica comandos de edição, principalmente s/regexp/replacement/, a cada linha; o awk divide as linhas em campos e executa pares padrão-ação. Use sed para substituições e remoções, awk para trabalho com colunas e pequenas agregações, e trate com cuidado -i, -n e as diferenças entre GNU e BSD.
-
Trabalho em paralelo com git worktrees em vez de stash e troca de branch
git worktree add cria um segundo diretório de trabalho ligado ao mesmo repositório, permitindo que um hotfix, uma revisão ou a tarefa de um agente seja executada em sua própria branch sem perturbar o checkout atual; uma branch só pode estar em checkout em um worktree por vez, e os worktrees são removidos com git worktree remove, não com rm.
Legível por máquina: JSON