Voltar às atualizações
New releaseAug 30, 2026

nushell v0.115.0

Um novo tipo de shell

Compartilhar

Nushell

Crates.io Build Status Nightly Build Discord The Changelog #363 GitHub commit activity GitHub contributors

Um novo tipo de shell.

Exemplo de nushell

Índice

Status

Este projeto atingiu um nível de qualidade de produto mínimo viável. Muitas pessoas o usam como driver diário, mas pode ser instável para alguns comandos. O design do Nu está sujeito a mudanças à medida que amadurece.

Aprendendo Sobre Nu

O livro Nushell é a principal fonte de documentação do Nushell. Você pode encontrar uma lista completa de comandos Nu no livro, e temos muitos exemplos de uso do Nu em nosso cookbook.

Também somos ativos no Discord; venha conversar conosco!

Instalação

Para instalar o Nu rapidamente:

# Linux e macOS
brew install nushell
# Windows
winget install nushell

Para usar Nu no GitHub Action, consulte setup-nu para mais detalhes.

Instruções detalhadas de instalação podem ser encontradas no capítulo de instalação do livro. O Nu está disponível através de muitos gerenciadores de pacotes:

Packaging status

Para detalhes sobre quais plataformas a equipe do Nushell suporta ativamente, consulte nossa política de suporte de plataformas.

Configuração

As configurações padrão podem ser encontradas em sample_config que são os arquivos de configuração que se obtém ao iniciar o Nushell pela primeira vez.

Isso define toda a configuração padrão para executar o Nushell. A partir daqui, pode-se então personalizar este arquivo para suas necessidades específicas.

Para ver onde config.nu está localizado no seu sistema, basta digitar este comando.

$nu.config-path

Consulte nosso livro para toda a documentação do Nushell.

Filosofia

O Nu se inspira em projetos como PowerShell, linguagens de programação funcional e ferramentas CLI modernas. Em vez de pensar em arquivos e dados como fluxos brutos de texto, o Nu vê cada entrada como algo com estrutura. Por exemplo, quando você lista o conteúdo de um diretório, o que você recebe de volta é uma tabela de linhas, onde cada linha representa um item nesse diretório. Esses valores podem ser canalizados através de uma série de etapas, em uma série de comandos chamada de 'pipeline'.

Pipelines

No Unix, é comum canalizar entre comandos para dividir um comando sofisticado em várias etapas. O Nu leva isso um passo adiante e se baseia fortemente na ideia de pipelines. Como na filosofia Unix, o Nu permite que comandos enviem saída para stdout e leiam de stdin. Além disso, comandos podem emitir dados estruturados (você pode pensar nisso como um terceiro tipo de fluxo). Comandos que funcionam no pipeline se enquadram em uma de três categorias:

  • Comandos que produzem um fluxo (ex.: ls)
  • Comandos que filtram um fluxo (ex.: where type == "dir")
  • Comandos que consomem a saída do pipeline (ex.: table)

Comandos são separados pelo símbolo de pipe (|) para denotar um pipeline fluindo da esquerda para a direita.

ls | where type == "dir" | table
# => ╭────┬──────────┬──────┬─────────┬───────────────╮
# => │ #  │   name   │ type │  size   │   modified    │
# => ├────┼──────────┼──────┼─────────┼───────────────┤
# => │  0 │ .cargo   │ dir  │     0 B │ 9 minutes ago │
# => │  1 │ assets   │ dir  │     0 B │ 2 weeks ago   │
# => │  2 │ crates   │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  3 │ docker   │ dir  │     0 B │ 2 weeks ago   │
# => │  4 │ docs     │ dir  │     0 B │ 2 weeks ago   │
# => │  5 │ images   │ dir  │     0 B │ 2 weeks ago   │
# => │  6 │ pkg_mgrs │ dir  │     0 B │ 2 weeks ago   │
# => │  7 │ samples  │ dir  │     0 B │ 2 weeks ago   │
# => │  8 │ src      │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  9 │ target   │ dir  │     0 B │ a day ago     │
# => │ 10 │ tests    │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │ 11 │ wix      │ dir  │     0 B │ 2 weeks ago   │
# => ╰────┴──────────┴──────┴─────────┴───────────────╯

Como na maioria das vezes você vai querer ver a saída de um pipeline, table é assumido. Poderíamos também ter escrito o acima:

ls | where type == "dir"

Ser capaz de usar os mesmos comandos e compô-los de maneiras diferentes é uma filosofia importante no Nu. Por exemplo, poderíamos usar o comando ps embutido para obter uma lista dos processos em execução, usando o mesmo where acima.

ps | where cpu > 0
# => ╭───┬───────┬───────────┬───────┬───────────┬───────────╮
# => │ # │  pid  │   name    │  cpu  │    mem    │  virtual  │
# => ├───┼───────┼───────────┼───────┼───────────┼───────────┤
# => │ 0 │  2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
# => │ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
# => │ 2 │ 17700 │ nu.exe    │  3.77 │  26.1 MiB │   8.8 MiB │
# => ╰───┴───────┴───────────┴───────┴───────────┴───────────╯

Abrindo arquivos

O Nu pode carregar conteúdos de arquivos e URLs como texto bruto ou dados estruturados (se reconhecer o formato). Por exemplo, você pode carregar um arquivo .toml como dados estruturados e explorá-lo:

open Cargo.toml
# => ╭──────────────────┬────────────────────╮
# => │ bin              │ [table 1 row]      │
# => │ dependencies     │ {record 25 fields} │
# => │ dev-dependencies │ {record 8 fields}  │
# => │ features         │ {record 10 fields} │
# => │ package          │ {record 13 fields} │
# => │ patch            │ {record 1 field}   │
# => │ profile          │ {record 3 fields}  │
# => │ target           │ {record 3 fields}  │
# => │ workspace        │ {record 1 field}   │
# => ╰──────────────────┴────────────────────╯

Podemos canalizar isso para um comando que obtém o conteúdo de uma das colunas:

open Cargo.toml | get package
# => ╭───────────────┬────────────────────────────────────╮
# => │ authors       │ [list 1 item]                      │
# => │ default-run   │ nu                                 │
# => │ description   │ A new type of shell                │
# => │ documentation │ https://www.nushell.sh/book/       │
# => │ edition       │ 2018                               │
# => │ exclude       │ [list 1 item]                      │
# => │ homepage      │ https://www.nushell.sh             │
# => │ license       │ MIT                                │
# => │ metadata      │ {record 1 field}                   │
# => │ name          │ nu                                 │
# => │ repository    │ https://github.com/nushell/nushell │
# => │ rust-version  │ 1.60                               │
# => │ version       │ 0.72.0                             │
# => ╰───────────────┴────────────────────────────────────╯

E se necessário, podemos aprofundar ainda mais:

open Cargo.toml | get package.version
# => 0.72.0

Plugins

O Nu suporta plugins que oferecem funcionalidade adicional ao shell e seguem o mesmo modelo de dados estruturados que os comandos embutidos usam. Há alguns exemplos nos diretórios crates/nu_plugins_*.

Plugins são binários que estão disponíveis no seu PATH e seguem uma convenção de nomenclatura nu_plugin_*. Esses binários interagem com o nu através de um protocolo JSON-RPC simples onde o comando se identifica e envia sua configuração, tornando-o disponível para uso. Se o plugin é um filtro, os dados fluem para ele um elemento por vez, e ele pode transmitir dados de volta via stdin/stdout. Se o plugin é um sink, ele recebe o vetor completo de dados finais e tem liberdade total sobre stdin/stdout para usar como preferir.

O repositório awesome-nu lista uma variedade de nu-plugins, enquanto o repositório showcase mostra posts informativos de blog que foram escritos sobre o Nushell, juntamente com vídeos que destacam tópicos técnicos que foram apresentados.

Objetivos

O Nu adere estritamente a um conjunto de objetivos que compõem sua filosofia de design. À medida que recursos são adicionados, eles são verificados contra esses objetivos.

  • Em primeiro lugar, o Nu é multiplataforma. Comandos e técnicas devem funcionar em todas as plataformas e o Nu tem suporte de primeira classe para Windows, macOS e Linux.

  • O Nu garante compatibilidade com executáveis existentes específicos de plataforma.

  • O fluxo de trabalho e as ferramentas do Nu devem ter a usabilidade esperada de software moderno em 2022 (e além).

  • O Nu vê dados como estruturados ou não estruturados. É um shell estruturado como o PowerShell.

  • Finalmente, o Nu vê dados funcionalmente. Em vez de usar mutação, pipelines atuam como um meio de carregar, alterar e salvar dados sem estado mutável.

Suportado Oficialmente Por

Envie uma issue ou PR para ser adicionado a esta lista.

Contribuindo

Consulte Contribuindo para detalhes. Obrigado a todas as pessoas que já contribuíram!

Licença

O projeto é disponibilizado sob a licença MIT. Consulte o arquivo LICENSE para mais informações.

Categorias