Ir al contenido

Hoja de Referencia de Nushell - Shell Estructurado Moderno

Hoja de Referencia de Nushell - Shell Estructurado Moderno

Sección titulada «Hoja de Referencia de Nushell - Shell Estructurado Moderno»

Un shell moderno que trata todo como datos estructurados en lugar de texto sin formato. Las tuberías funcionan con tablas, registros y listas — no solo cadenas. Piensa en él como un shell que entiende JSON, CSV, TOML y YAML de forma nativa.

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 (o descargar desde GitHub releases)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (Todas las plataformas)cargo install nu
Nixnix-env -iA nixpkgs.nushell

Lanzar: Ejecutar nu desde cualquier shell para iniciar Nushell. Establecer como shell predeterminado: chsh -s $(which nu)

Las tuberías de Nushell pasan datos estructurados (tablas, registros, listas), no texto:

# Traditional shell: text → grep → awk → text
# Nushell: table → where → select → table

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

Tipos de datos: cadenas, enteros, flotantes, booleanos, fechas, duraciones, tamaños de archivo, listas, registros, tablas

ComandoDescripción
lsListar directorio como tabla estructurada
ls -laListar todos los archivos (incluyendo ocultos) en formato largo
cd path/to/dirCambiar directorio
cp source destCopiar archivos o directorios
mv source destMover o renombrar archivos
rm fileEliminar archivos
mkdir dirnameCrear directorio
open file.jsonAbrir archivo como datos estructurados (auto-detecta formato)
open file.csvAbrir CSV como tabla
open file.tomlAbrir TOML como registro
save output.jsonGuardar salida de tubería a archivo
cat file.txtMostrar contenido de archivo como texto
psMostrar procesos en ejecución como tabla
sysMostrar información del sistema
which commandEncontrar ubicación de comando
help commandsListar todos los comandos disponibles
help <command>Mostrar ayuda para un comando específico
ComandoDescripción
ls | where size > 10mbFiltrar archivos mayores a 10 MB
ls | where name =~ "\.rs$"Filtrar por regex en nombre de archivo
ls | where type == "dir"Mostrar solo directorios
ls | where modified > 2dayArchivos modificados en los últimos 2 días
ls | select name sizeMostrar solo columnas de nombre y tamaño
ls | reject typeEliminar la columna de tipo
ls | get nameExtraer solo la columna de nombre como lista
ls | first 5Mostrar primeras 5 entradas
ls | last 3Mostrar últimas 3 entradas
ls | skip 10Saltar primeras 10 entradas
ls | nth 0 2 4Seleccionar entradas por índice
ls | lengthContar número de entradas
ls | uniqEliminar entradas duplicadas
ComandoDescripción
ls | sort-by sizeOrdenar por tamaño ascendente
ls | sort-by size --reverseOrdenar por tamaño descendente
ls | sort-by nameOrdenar alfabéticamente
ls | group-by typeAgrupar entradas por tipo
ls | group-by {get name | path parse | get extension}Agrupar por extensión de archivo
ComandoDescripción
"hello world" | str upcaseConvertir a mayúsculas
"HELLO" | str downcaseConvertir a minúsculas
" hello " | str trimRecortar espacios en blanco
"hello" | str contains "ell"Verificar si cadena contiene subcadena
"hello" | str replace "l" "L"Reemplazar caracteres
"hello world" | split row " "Dividir cadena en lista
["hello" "world"] | str join ", "Unir lista en cadena
"hello" | str lengthObtener longitud de cadena
"hello" | str starts-with "he"Verificar prefijo de cadena
ComandoDescripción
open data.json | get field_nameAcceder a un campo en JSON
open data.json | get nested.fieldAcceder a campos anidados
{name: "Alice", age: 30}Crear un registro
[1 2 3 4 5]Crear una lista
[[name age]; [Alice 30] [Bob 25]]Crear una tabla
$data | to jsonConvertir a JSON
$data | to csvConvertir a CSV
$data | to tomlConvertir a TOML
$data | to yamlConvertir a YAML
$data | to mdConvertir a tabla Markdown
ComandoDescripción
[1 2 3 4] | math sumSuma de valores
[1 2 3 4] | math avgPromedio 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 sumTamaño total de archivos listados
1 + 2Aritmética básica
10 / 3División
2 ** 8Exponenciación
ComandoDescripción
http get https://api.example.com/dataObtener URL y analizar respuesta
http post https://api.example.com/data {key: "value"}Solicitud POST con cuerpo
fetch url | get fieldObtener y extraer campo específico
# Variables (immutable by default)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# Mutable variables
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 }

# Custom commands (functions)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
ArchivoPropósito
$nu.config-pathConfiguración principal (config.nu)
$nu.env-pathConfiguración de entorno (env.nu)
# Show config file location
$nu.config-path

# Edit config
config nu    # Open config.nu in editor
config env   # Open env.nu in editor
# In config.nu
$env.config = {
    show_banner: false           # Disable welcome banner
    table: {
        mode: rounded            # Table style: rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # Fuzzy tab completion
    }
    history: {
        max_size: 10000          # History entries to keep
        file_format: "sqlite"    # sqlite or plaintext
    }
}
# Find largest files in a project
ls **/* | where type == "file" | sort-by size --reverse | first 20

# Parse and query JSON API
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# Convert between formats
open data.csv | to json | save data.json

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

# Quick system overview
sys | get host
ps | sort-by cpu --reverse | first 10
CaracterísticaBash/ZshNushell
Modelo de datosFlujos de textoTablas estructuradas
Análisis de salidagrep, awk, sedwhere, select, get integrados
Manejo de JSONRequiere jqNativo (open file.json)
Manejo de erroresCódigos de salidaMensajes de error enriquecidos
Completado con tabuladorBásicoConsciente del contexto
Sistema de tiposNingunoEnteros, cadenas, fechas, tamaños, etc.
Curva de aprendizajeFamiliarNueva sintaxis a aprender
Comandos externosNativoTotalmente compatible