Pular para o conteúdo

Nushell - Folha de Referência do Shell Estruturado Moderno

Nushell - Folha de Referência do Shell Estruturado Moderno

Seção intitulada “Nushell - Folha de Referência do Shell Estruturado Moderno”

Um shell moderno que trata tudo como dados estruturados em vez de texto bruto. Pipelines trabalham com tabelas, registros e listas — não apenas strings. Pense nele como um shell que entende JSON, CSV, TOML e YAML nativamente.

PlataformaComando
macOS (Homebrew)brew install nushell
Windows (Winget)winget install nushell
Windows (Chocolatey)choco install nushell
Windows (Scoop)scoop install nu
Ubuntu/Debiansudo apt install nushell (ou baixar dos releases do GitHub)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (Todas as plataformas)cargo install nu
Nixnix-env -iA nixpkgs.nushell

Iniciar: Execute nu de qualquer shell para iniciar o Nushell. Definir como shell padrão: chsh -s $(which nu)

Pipelines do Nushell passam dados estruturados (tabelas, registros, listas), não texto:

# Shell tradicional: texto → grep → awk → texto
# Nushell: tabela → where → select → tabela

ls | where size > 1mb | sort-by size --reverse | first 5

Tipos de dados: strings, inteiros, floats, booleanos, datas, durações, tamanhos de arquivo, listas, registros, tabelas

ComandoDescrição
lsListar diretório como uma tabela estruturada
ls -laListar todos os arquivos (incluindo ocultos) em formato longo
cd path/to/dirMudar diretório
cp source destCopiar arquivos ou diretórios
mv source destMover ou renomear arquivos
rm fileRemover arquivos
mkdir dirnameCriar diretório
open file.jsonAbrir arquivo como dados estruturados (detecta formato automaticamente)
open file.csvAbrir CSV como tabela
open file.tomlAbrir TOML como registro
save output.jsonSalvar saída do pipeline para arquivo
cat file.txtExibir conteúdo do arquivo como texto
psMostrar processos em execução como tabela
sysMostrar informações do sistema
which commandEncontrar localização do comando
help commandsListar todos os comandos disponíveis
help <command>Mostrar ajuda para um comando específico
ComandoDescrição
ls | where size > 10mbFiltrar arquivos maiores que 10 MB
ls | where name =~ "\.rs$"Filtrar por regex no nome do arquivo
ls | where type == "dir"Mostrar apenas diretórios
ls | where modified > 2dayArquivos modificados nos últimos 2 dias
ls | select name sizeMostrar apenas colunas name e size
ls | reject typeRemover a coluna type
ls | get nameExtrair apenas a coluna name como lista
ls | first 5Mostrar primeiras 5 entradas
ls | last 3Mostrar últimas 3 entradas
ls | skip 10Pular primeiras 10 entradas
ls | nth 0 2 4Selecionar entradas por índice
ls | lengthContar número de entradas
ls | uniqRemover entradas duplicadas
ComandoDescrição
ls | sort-by sizeOrdenar por tamanho crescente
ls | sort-by size --reverseOrdenar por tamanho decrescente
ls | sort-by nameOrdenar alfabeticamente
ls | group-by typeAgrupar entradas por tipo
ls | group-by {get name | path parse | get extension}Agrupar por extensão de arquivo
ComandoDescrição
"hello world" | str upcaseConverter para maiúsculas
"HELLO" | str downcaseConverter para minúsculas
" hello " | str trimRemover espaços em branco
"hello" | str contains "ell"Verificar se string contém substring
"hello" | str replace "l" "L"Substituir caracteres
"hello world" | split row " "Dividir string em lista
["hello" "world"] | str join ", "Juntar lista em string
"hello" | str lengthObter comprimento da string
"hello" | str starts-with "he"Verificar prefixo da string
ComandoDescrição
open data.json | get field_nameAcessar um campo em JSON
open data.json | get nested.fieldAcessar campos aninhados
{name: "Alice", age: 30}Criar um registro
[1 2 3 4 5]Criar uma lista
[[name age]; [Alice 30] [Bob 25]]Criar uma tabela
$data | to jsonConverter para JSON
$data | to csvConverter para CSV
$data | to tomlConverter para TOML
$data | to yamlConverter para YAML
$data | to mdConverter para tabela Markdown
ComandoDescrição
[1 2 3 4] | math sumSoma de valores
[1 2 3 4] | math avgMédia de valores
[1 2 3 4] | math maxValor máximo
[1 2 3 4] | math minValor mínimo
[1 2 3 4] | math medianValor mediano
ls | get size | math sumTamanho total dos arquivos listados
1 + 2Aritmética básica
10 / 3Divisão
2 ** 8Exponenciação
ComandoDescrição
http get https://api.example.com/dataBuscar URL e analisar resposta
http post https://api.example.com/data {key: "value"}Requisição POST com corpo
fetch url | get fieldBuscar e extrair campo específico
# Variáveis (imutáveis por padrão)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# Variáveis mutáveis
mut counter = 0
$counter += 1

# If/else
if $count > 10 { "big" } else { "small" }

# Loops
for file in (ls) { print $file.name }
ls | each { |row| $row.name | str upcase }

# Comandos personalizados (funções)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
ArquivoFinalidade
$nu.config-pathConfiguração principal (config.nu)
$nu.env-pathConfiguração de ambiente (env.nu)
# Mostrar localização do arquivo de configuração
$nu.config-path

# Editar configuração
config nu    # Abrir config.nu no editor
config env   # Abrir env.nu no editor
# Em config.nu
$env.config = {
    show_banner: false           # Desabilitar banner de boas-vindas
    table: {
        mode: rounded            # Estilo de tabela: rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # Completação fuzzy com Tab
    }
    history: {
        max_size: 10000          # Entradas de histórico para manter
        file_format: "sqlite"    # sqlite ou plaintext
    }
}
# Encontrar maiores arquivos em um projeto
ls **/* | where type == "file" | sort-by size --reverse | first 20

# Analisar e consultar API JSON
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# Converter entre formatos
open data.csv | to json | save data.json

# Analisar arquivos de log
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r

# Visão geral rápida do sistema
sys | get host
ps | sort-by cpu --reverse | first 10
RecursoBash/ZshNushell
Modelo de dadosFluxos de textoTabelas estruturadas
Análise de saídagrep, awk, sedwhere, select, get integrados
Manipulação de JSONRequer jqNativo (open file.json)
Tratamento de errosCódigos de saídaMensagens de erro ricas
Completação com TabBásicaSensível ao contexto
Sistema de tiposNenhumInteiros, strings, datas, tamanhos, etc.
Curva de aprendizadoFamiliarNova sintaxe para aprender
Comandos externosNativoTotalmente suportado