Eine moderne Shell, die alles als strukturierte Daten statt als Rohtext behandelt. Pipelines arbeiten mit Tabellen, Records und Listen — nicht nur mit Strings. Stellen Sie sich eine Shell vor, die JSON, CSV, TOML und YAML nativ versteht.
| Plattform | Befehl |
|---|
| macOS (Homebrew) | brew install nushell |
| Windows (Winget) | winget install nushell |
| Windows (Chocolatey) | choco install nushell |
| Windows (Scoop) | scoop install nu |
| Ubuntu/Debian | sudo apt install nushell (oder Download von GitHub Releases) |
| Arch Linux | sudo pacman -S nushell |
| Fedora/RHEL | sudo dnf install nushell |
| Cargo (Alle Plattformen) | cargo install nu |
| Nix | nix-env -iA nixpkgs.nushell |
Starten: Führen Sie nu von jeder Shell aus, um Nushell zu starten. Als Standard-Shell festlegen: chsh -s $(which nu)
Nushell-Pipelines übergeben strukturierte Daten (Tabellen, Records, Listen), nicht Text:
# Traditionelle Shell: Text → grep → awk → Text
# Nushell: Tabelle → where → select → Tabelle
ls | where size > 1mb | sort-by size --reverse | first 5
Datentypen: Strings, Integers, Floats, Booleans, Datumsangaben, Zeitdauern, Dateigrößen, Listen, Records, Tabellen
| Befehl | Beschreibung |
|---|
ls | Verzeichnis als strukturierte Tabelle auflisten |
ls -la | Alle Dateien (einschließlich versteckter) in langem Format auflisten |
cd path/to/dir | Verzeichnis wechseln |
cp source dest | Dateien oder Verzeichnisse kopieren |
mv source dest | Dateien verschieben oder umbenennen |
rm file | Dateien entfernen |
mkdir dirname | Verzeichnis erstellen |
open file.json | Datei als strukturierte Daten öffnen (erkennt Format automatisch) |
open file.csv | CSV als Tabelle öffnen |
open file.toml | TOML als Record öffnen |
save output.json | Pipeline-Ausgabe in Datei speichern |
cat file.txt | Dateiinhalt als Text anzeigen |
ps | Laufende Prozesse als Tabelle anzeigen |
sys | Systeminformationen anzeigen |
which command | Befehlsspeicherort finden |
help commands | Alle verfügbaren Befehle auflisten |
help <command> | Hilfe für einen bestimmten Befehl anzeigen |
| Befehl | Beschreibung |
|---|
ls | where size > 10mb | Dateien größer als 10 MB filtern |
ls | where name =~ "\.rs$" | Nach Regex auf Dateinamen filtern |
ls | where type == "dir" | Nur Verzeichnisse anzeigen |
ls | where modified > 2day | In den letzten 2 Tagen geänderte Dateien |
ls | select name size | Nur Name- und Größenspalten anzeigen |
ls | reject type | Typ-Spalte entfernen |
ls | get name | Nur Name-Spalte als Liste extrahieren |
ls | first 5 | Erste 5 Einträge anzeigen |
ls | last 3 | Letzte 3 Einträge anzeigen |
ls | skip 10 | Erste 10 Einträge überspringen |
ls | nth 0 2 4 | Einträge nach Index auswählen |
ls | length | Anzahl der Einträge zählen |
ls | uniq | Doppelte Einträge entfernen |
| Befehl | Beschreibung |
|---|
ls | sort-by size | Nach Größe aufsteigend sortieren |
ls | sort-by size --reverse | Nach Größe absteigend sortieren |
ls | sort-by name | Alphabetisch sortieren |
ls | group-by type | Einträge nach Typ gruppieren |
ls | group-by {get name | path parse | get extension} | Nach Dateierweiterung gruppieren |
| Befehl | Beschreibung |
|---|
"hello world" | str upcase | In Großbuchstaben umwandeln |
"HELLO" | str downcase | In Kleinbuchstaben umwandeln |
" hello " | str trim | Leerzeichen trimmen |
"hello" | str contains "ell" | Prüfen, ob String Teilstring enthält |
"hello" | str replace "l" "L" | Zeichen ersetzen |
"hello world" | split row " " | String in Liste aufteilen |
["hello" "world"] | str join ", " | Liste zu String verbinden |
"hello" | str length | String-Länge ermitteln |
"hello" | str starts-with "he" | String-Präfix prüfen |
| Befehl | Beschreibung |
|---|
open data.json | get field_name | Auf ein Feld in JSON zugreifen |
open data.json | get nested.field | Auf verschachtelte Felder zugreifen |
{name: "Alice", age: 30} | Record erstellen |
[1 2 3 4 5] | Liste erstellen |
[[name age]; [Alice 30] [Bob 25]] | Tabelle erstellen |
$data | to json | In JSON konvertieren |
$data | to csv | In CSV konvertieren |
$data | to toml | In TOML konvertieren |
$data | to yaml | In YAML konvertieren |
$data | to md | In Markdown-Tabelle konvertieren |
| Befehl | Beschreibung |
|---|
[1 2 3 4] | math sum | Summe der Werte |
[1 2 3 4] | math avg | Durchschnitt der Werte |
[1 2 3 4] | math max | Maximalwert |
[1 2 3 4] | math min | Minimalwert |
[1 2 3 4] | math median | Medianwert |
ls | get size | math sum | Gesamtgröße der aufgelisteten Dateien |
1 + 2 | Grundlegende Arithmetik |
10 / 3 | Division |
2 ** 8 | Potenzierung |
| Befehl | Beschreibung |
|---|
http get https://api.example.com/data | URL abrufen und Antwort parsen |
http post https://api.example.com/data {key: "value"} | POST-Anfrage mit Body |
fetch url | get field | Abrufen und bestimmtes Feld extrahieren |
# Variablen (standardmäßig unveränderlich)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)
# Veränderliche Variablen
mut counter = 0
$counter += 1
# If/else
if $count > 10 { "big" } else { "small" }
# Schleifen
for file in (ls) { print $file.name }
ls | each { |row| $row.name | str upcase }
# Benutzerdefinierte Befehle (Funktionen)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
| Datei | Zweck |
|---|
$nu.config-path | Hauptkonfiguration (config.nu) |
$nu.env-path | Umgebungskonfiguration (env.nu) |
# Speicherort der Konfigurationsdatei anzeigen
$nu.config-path
# Konfiguration bearbeiten
config nu # config.nu im Editor öffnen
config env # env.nu im Editor öffnen
# In config.nu
$env.config = {
show_banner: false # Willkommensbanner deaktivieren
table: {
mode: rounded # Tabellenstil: rounded, compact, thin, none
}
completions: {
algorithm: "fuzzy" # Fuzzy-Tab-Vervollständigung
}
history: {
max_size: 10000 # Zu behaltende History-Einträge
file_format: "sqlite" # sqlite oder plaintext
}
}
# Größte Dateien in einem Projekt finden
ls **/* | where type == "file" | sort-by size --reverse | first 20
# JSON-API parsen und abfragen
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count
# Zwischen Formaten konvertieren
open data.csv | to json | save data.json
# Logdateien analysieren
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r
# Schneller Systemüberblick
sys | get host
ps | sort-by cpu --reverse | first 10
| Funktion | Bash/Zsh | Nushell |
|---|
| Datenmodell | Textströme | Strukturierte Tabellen |
| Ausgabe parsen | grep, awk, sed | Eingebaut where, select, get |
| JSON-Verarbeitung | Erfordert jq | Nativ (open file.json) |
| Fehlerbehandlung | Exit-Codes | Reichhaltige Fehlermeldungen |
| Tab-Vervollständigung | Einfach | Kontextbewusst |
| Typsystem | Keins | Integers, Strings, Datumsangaben, Größen, etc. |
| Lernkurve | Vertraut | Neue Syntax zu lernen |
| Externe Befehle | Nativ | Vollständig unterstützt |