コンテンツにスキップ

Nushell - モダンな構造化シェル チートシート

Nushell - モダンな構造化シェル チートシート

Section titled “Nushell - モダンな構造化シェル チートシート”

すべてを生のテキストではなく構造化データとして扱うモダンなシェル。パイプラインはテーブル、レコード、リストで動作します — 単なる文字列ではありません。JSON、CSV、TOML、YAMLをネイティブに理解するシェルと考えてください。

プラットフォームコマンド
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(またはGitHubリリースからダウンロード)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (全プラットフォーム)cargo install nu
Nixnix-env -iA nixpkgs.nushell

起動: 任意のシェルからnuを実行してNushellを起動。デフォルトシェルとして設定: chsh -s $(which nu)

Nushellのパイプラインは構造化データ(テーブル、レコード、リスト)を渡します、テキストではなく:

# 従来のシェル: テキスト → grep → awk → テキスト
# Nushell: テーブル → where → select → テーブル

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

データ型: 文字列、整数、浮動小数点数、ブール値、日付、期間、ファイルサイズ、リスト、レコード、テーブル

コマンド説明
lsディレクトリを構造化テーブルとしてリスト表示
ls -la長形式ですべてのファイル(隠しファイルを含む)をリスト表示
cd path/to/dirディレクトリを変更
cp source destファイルまたはディレクトリをコピー
mv source destファイルを移動または名前変更
rm fileファイルを削除
mkdir dirnameディレクトリを作成
open file.jsonファイルを構造化データとして開く(形式を自動検出)
open file.csvCSVをテーブルとして開く
open file.tomlTOMLをレコードとして開く
save output.jsonパイプライン出力をファイルに保存
cat file.txtファイル内容をテキストとして表示
ps実行中のプロセスをテーブルとして表示
sysシステム情報を表示
which commandコマンドの場所を検索
help commands利用可能なすべてのコマンドをリスト表示
help <command>特定のコマンドのヘルプを表示
コマンド説明
ls | where size > 10mb10 MBより大きいファイルをフィルター
ls | where name =~ "\.rs$"ファイル名で正規表現によりフィルター
ls | where type == "dir"ディレクトリのみ表示
ls | where modified > 2day過去2日以内に変更されたファイル
ls | select name sizenameとsize列のみ表示
ls | reject typetype列を削除
ls | get namename列のみをリストとして抽出
ls | first 5最初の5エントリを表示
ls | last 3最後の3エントリを表示
ls | skip 10最初の10エントリをスキップ
ls | nth 0 2 4インデックスでエントリを選択
ls | lengthエントリ数をカウント
ls | uniq重複エントリを削除
コマンド説明
ls | sort-by sizeサイズで昇順にソート
ls | sort-by size --reverseサイズで降順にソート
ls | sort-by nameアルファベット順にソート
ls | group-by typeタイプでエントリをグループ化
ls | group-by {get name | path parse | get extension}ファイル拡張子でグループ化
コマンド説明
"hello world" | str upcase大文字に変換
"HELLO" | str downcase小文字に変換
" hello " | str trim空白をトリム
"hello" | str contains "ell"文字列が部分文字列を含むかチェック
"hello" | str replace "l" "L"文字を置換
"hello world" | split row " "文字列をリストに分割
["hello" "world"] | str join ", "リストを文字列に結合
"hello" | str length文字列の長さを取得
"hello" | str starts-with "he"文字列のプレフィックスをチェック
コマンド説明
open data.json | get field_nameJSONのフィールドにアクセス
open data.json | get nested.fieldネストされたフィールドにアクセス
{name: "Alice", age: 30}レコードを作成
[1 2 3 4 5]リストを作成
[[name age]; [Alice 30] [Bob 25]]テーブルを作成
$data | to jsonJSONに変換
$data | to csvCSVに変換
$data | to tomlTOMLに変換
$data | to yamlYAMLに変換
$data | to mdMarkdownテーブルに変換
コマンド説明
[1 2 3 4] | math sum値の合計
[1 2 3 4] | math avg値の平均
[1 2 3 4] | math max最大値
[1 2 3 4] | math min最小値
[1 2 3 4] | math median中央値
ls | get size | math sumリストされたファイルの合計サイズ
1 + 2基本的な算術演算
10 / 3除算
2 ** 8累乗
コマンド説明
http get https://api.example.com/dataURLを取得してレスポンスを解析
http post https://api.example.com/data {key: "value"}ボディ付きPOSTリクエスト
fetch url | get field取得して特定のフィールドを抽出
# 変数(デフォルトで不変)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# 可変変数
mut counter = 0
$counter += 1

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

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

# カスタムコマンド(関数)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
ファイル目的
$nu.config-pathメイン設定(config.nu
$nu.env-path環境設定(env.nu
# 設定ファイルの場所を表示
$nu.config-path

# 設定を編集
config nu    # config.nuをエディタで開く
config env   # env.nuをエディタで開く
# config.nu内
$env.config = {
    show_banner: false           # ウェルカムバナーを無効化
    table: {
        mode: rounded            # テーブルスタイル: rounded、compact、thin、none
    }
    completions: {
        algorithm: "fuzzy"       # ファジータブ補完
    }
    history: {
        max_size: 10000          # 保持する履歴エントリ数
        file_format: "sqlite"    # sqliteまたはplaintext
    }
}
# プロジェクト内の最大ファイルを検索
ls **/* | where type == "file" | sort-by size --reverse | first 20

# JSON APIを解析してクエリ
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# 形式間で変換
open data.csv | to json | save data.json

# ログファイルを分析
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r

# クイックシステム概要
sys | get host
ps | sort-by cpu --reverse | first 10
機能Bash/ZshNushell
データモデルテキストストリーム構造化テーブル
出力の解析grepawksed組み込みのwhereselectget
JSON処理jqが必要ネイティブ(open file.json
エラーハンドリング終了コードリッチなエラーメッセージ
タブ補完基本コンテキスト認識
型システムなし整数、文字列、日付、サイズなど
学習曲線馴染みがある新しい構文を学ぶ必要がある
外部コマンドネイティブ完全サポート