# google-terminal-search

Busca no Google a partir do terminal: um script Bash de 17 linhas, sem dependências

- URL: https://fernando.moretes.com/open-source/google-terminal-search

- Markdown: https://fernando.moretes.com/open-source/google-terminal-search/guide.md?lang=pt

- GitHub: https://github.com/fernando-moretes/tool-google-terminal-search

- Homepage: https://fernando.moretes.com

- Language: Shell

- Topics: automation, bash, cli, developer-tools, google-search, moretes, portfolio, productivity, terminal

- Stars: 0

- Forks: 0

- Updated: 2026-09-29T16:36:27Z

---

O `tool-google-terminal-search` é um script Bash de 17 linhas que pega o que você digita no terminal, monta a URL de busca do Google e abre no navegador padrão, com `open` no macOS e `xdg-open` no Linux.

## Por que isso existe

A pergunta aqui não é "preciso de uma ferramenta para pesquisar no Google?". A pergunta é "quantas vezes por dia eu saio do terminal só para colar uma mensagem de erro numa aba nova?". Num dia de plantão a resposta passa fácil de vinte: um `AccessDeniedException` que não reconheço, uma flag do `rsync` que esqueci, o nome exato de uma chave de condição do IAM.

Cada uma dessas trocas tem o mesmo roteiro: tirar a mão do teclado, achar o navegador, abrir uma aba, colar, apertar Enter. Ninguém mede o custo de uma troca isolada. O que pesa é a soma, e principalmente a interrupção no meio de um raciocínio.

Este script corta o roteiro para um comando. Você digita `google AccessDeniedException ssm`, o navegador abre já na página de resultados e o terminal fica livre para o próximo comando.

Ele não tenta ser um cliente do Google no terminal. Não faz scraping, não renderiza resultado em texto, não chama API nenhuma. Foi uma escolha deliberada: tudo isso exigiria chave de API, cota ou parsing de HTML que quebra quando o Google muda o layout, e esse custo de manutenção não se paga numa ferramenta de atalho.

## O que acontece quando você roda `google <termos>`

O fluxo inteiro mora num único arquivo, `google_search.sh`. Não há estado, configuração nem chamada de rede feita pelo próprio script: a requisição HTTP sai do navegador.

### 🔧 Bash: google_search.sh

- Junta os argumentos search_query="$*" (compute)
- Troca espaço por + ${search_query// /+} (compute)
- Detecta o SO $OSTYPE (edge)

### 💻 Sistema operacional

- macOS open URL (frontend)
- Linux xdg-open URL (frontend)
- Outro SO Platform not supported (exit 1) (security)

### 🌐 Externo

- Google Search www.google.com/search?q= (external)

### Fluxos

- user -> join: argumentos
- join -> encode: string única
- encode -> detect: query formatada
- detect -> open: darwin*
- detect -> xdg: linux-gnu*
- detect -> fail: qualquer outro
- open -> google: navegador padrão
- xdg -> google: navegador padrão

## Instalação e uso

1. **Clone o repositório**: `git clone https://github.com/fernando-moretes/tool-google-terminal-search.git` e depois `cd tool-google-terminal-search`. O `readme.md` antigo ainda aponta para `fernandotech/google-terminal-search`, de antes da migração para a org; use a URL nova.

2. **Torne o script executável**: `chmod +x google_search.sh`. Sem isso o shell devolve `Permission denied` e você acaba rodando com `bash google_search.sh`, que funciona mas não vira atalho.

3. **Coloque no PATH com o nome `google`**: `mv google_search.sh /usr/local/bin/google` (pode pedir `sudo`). Se preferir não mexer em diretório do sistema, use `~/.local/bin/google` e confira que `~/.local/bin` está no seu `PATH`.

4. **Pesquise**: `google "lambda timeout 900 segundos"` ou sem aspas, `google lambda timeout 900 segundos`. O script usa `$*`, então os dois jeitos viram a mesma query.

_Quickstart completo, do clone à primeira busca_

```bash
git clone https://github.com/fernando-moretes/tool-google-terminal-search.git
cd tool-google-terminal-search
chmod +x google_search.sh
sudo mv google_search.sh /usr/local/bin/google

# aspas são opcionais: "$*" junta todos os argumentos
google aws lambda reserved concurrency
google "terraform import aws_s3_bucket"
```

## Como funciona por dentro

São três passos, todos em Bash puro.

**Montagem da query:** `search_query="$*"` junta todos os argumentos posicionais numa string só, separados por espaço. É por isso que aspas não fazem diferença.

**Formatação para URL:** `formatted_query="${search_query// /+}"` usa expansão de parâmetro do Bash para trocar cada espaço por `+`. Nenhum processo externo é chamado: nada de `sed`, `python` ou `jq`.

**Despacho por sistema operacional:** o script lê `$OSTYPE`. Se começa com `darwin`, chama `open`; se começa com `linux-gnu`, chama `xdg-open`. Qualquer outro valor imprime `Platform not supported` e sai com código `1`.

O resultado é que o script não tem dependência além do Bash e do abridor de URL que o sistema já traz. No macOS, `open` vem de fábrica. No Linux, `xdg-open` vem do pacote `xdg-utils`, presente na maioria dos desktops e ausente em boa parte das imagens de servidor e contêiner.

Essa ausência de dependência é o que mantém o custo de manutenção perto de zero: não há versão de biblioteca para atualizar nem API que possa mudar contrato.

> **O encoding só cobre espaço:** O script troca espaço por `+` e passa o resto cru para a URL. Isso falha em silêncio com caracteres reservados: `google C# async` vira `q=C` porque o `#` inicia o fragmento da URL; `google C++ templates` chega ao Google como "C templates", porque `+` é lido como espaço; e um `&` corta a query e começa um parâmetro novo. Nenhum desses casos dá erro: o navegador abre uma busca diferente da que você digitou.

## O que o script faz e o que não faz

- **Faz:** abre a página de resultados do Google no navegador padrão, a partir de qualquer diretório, com um comando.
- **Faz:** roda no macOS (`darwin*`) e em Linux com glibc (`linux-gnu*`) que tenha `xdg-open`.
- **Não faz:** mostrar resultado no terminal. Nada é baixado nem parseado pelo script.
- **Não faz:** escapar caracteres reservados como `#`, `&`, `+` e `?` (veja o aviso acima).
- **Não roda:** em Alpine (`linux-musl`), FreeBSD ou Windows nativo. Esses caem no `exit 1`.

## Perguntas frequentes

### Funciona no WSL?

O WSL reporta `linux-gnu` em `$OSTYPE`, então o script chama `xdg-open`. Se ele vai abrir o navegador do Windows depende de como o `xdg-open` está configurado na sua distro. Teste antes de contar com isso.

### Funciona por SSH num servidor?

Não de forma útil. O `xdg-open` tentaria abrir um navegador na máquina remota, que normalmente não tem nem sessão gráfica nem `xdg-utils` instalado.

### Dá para usar outro buscador?

O README sugere customizar o script. Na prática é trocar a URL `https://www.google.com/search?q=` nas duas linhas que chamam `open` e `xdg-open`. Não existe flag nem variável de ambiente para isso.

### Como contribuir?

O repositório segue as convenções do `platform`: branch `<tipo>/<escopo>` (`feat/`, `fix/`, `chore/`, `docs/`), commit e título de PR em Conventional Commits, e a versão sai dos commits. A pipeline (`pr-lint`, CI, segurança e release) vem dos workflows reutilizáveis de lá, então mudar a régua é mudar um arquivo no `platform`, não aqui. Um bom primeiro PR é o encoding completo da query.

## Referências

- [GitHub: fernando-moretes/tool-google-terminal-search](https://github.com/fernando-moretes/tool-google-terminal-search)
- [fernando.moretes.com](https://fernando.moretes.com)
- [GNU Bash Manual: Shell Parameter Expansion](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html)
- [Conventional Commits](https://www.conventionalcommits.org)

## Para quem é

Use quando você vive no terminal, num Mac ou num desktop Linux, e suas buscas são mensagem de erro, nome de flag ou nome de serviço. Esse é exatamente o caso em que o script brilha, e são 17 linhas que você lê inteiras em um minuto antes de colocar no `PATH`. Não use como está se você pesquisa linguagem com símbolo no nome (`C#`, `C++`, `F#`) ou se trabalha em Alpine, FreeBSD ou por SSH: lá ele falha ou, pior, abre a busca errada sem avisar. Nesses casos, faça o fork e troque a substituição de espaço por um encoding de URL completo antes de adotar.

## Links

- [GitHub repository](https://github.com/fernando-moretes/tool-google-terminal-search)
- [Homepage](https://fernando.moretes.com)
