Nushell
Book
Cookbook
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
Book
Cookbook
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • はじめに
  • Getting Started
    • Nu のインストール
    • Default Shell
    • クイックツアー
    • システム内の移動
    • Thinking in Nu
    • Nushell Cheat Sheet
  • Nu 基礎編
    • データ型
    • データの読み込み
    • パイプライン
    • Working with Strings
    • Working with Lists
    • テーブルを扱う
  • Programming in Nu
    • Custom Commands
    • エイリアス
    • Operators
    • /book/variables_and_subexpressions.html
    • Scripts
    • Modules
    • Overlays
    • /book/command_signature.html
    • Testing your Nushell Code
    • Best Practices
  • シェルとしての Nu
    • 設定
    • 環境変数
    • Stdout, Stderr, and Exit Codes
    • エスケープ
    • How to Configure 3rd Party Prompts
    • シェルの中のシェル
    • Reedline, Nu's Line Editor
    • Externs
    • Custom Completions
    • Coloring and Theming in Nu
    • Hooks
    • /book/background_task.html
  • Nu への移行
    • Bash から来た人向け
    • Coming from CMD.EXE
    • 他のシェルと DSL から Nu への対応表
    • 命令形言語から Nu への対応表
    • 関数型言語から Nu への対応表
    • Nushell 演算子対応表
  • Design Notes
    • How Nushell Code Gets Run
  • (Not So) Advanced
    • Standard Library (Preview)
    • Dataframes
    • メタデータ
    • Creating Your Own Errors
    • Parallelism
    • プラグイン
    • explore

クイックツアー

Nu で何ができるかを知るための最も簡単な方法は、例をいくつか見ることです。では始めましょう。

ls などのコマンドを実行してまず気づくことは、テキストブロックの代わりに構造化されたテーブルが返ってくることです。

ls
# => ╭────┬───────────────────────┬──────┬───────────┬─────────────╮
# => │ #  │         name          │ type │   size    │  modified   │
# => ├────┼───────────────────────┼──────┼───────────┼─────────────┤
# => │  0 │ 404.html              │ file │     429 B │ 3 days ago  │
# => │  1 │ CONTRIBUTING.md       │ file │     955 B │ 8 mins ago  │
# => │  2 │ Gemfile               │ file │   1.1 KiB │ 3 days ago  │
# => │  3 │ Gemfile.lock          │ file │   6.9 KiB │ 3 days ago  │
# => │  4 │ LICENSE               │ file │   1.1 KiB │ 3 days ago  │
# => │  5 │ README.md             │ file │     213 B │ 3 days ago  │
# => ...

このテーブルは、ただ別の形でディレクトリを表示しているだけではありません。スプレッドシートのように、このテーブルではデータをより対話的に扱うことができます。

はじめに、テーブルをサイズでソートしてみましょう。 ls の出力を取得し、カラムの値に基づいてテーブルをソートするコマンドに渡してみます。

ls | sort-by size | reverse
# => ╭────┬───────────────────────┬──────┬───────────┬─────────────╮
# => │ #  │         name          │ type │   size    │  modified   │
# => ├────┼───────────────────────┼──────┼───────────┼─────────────┤
# => │  0 │ Gemfile.lock          │ file │   6.9 KiB │ 3 days ago  │
# => │  1 │ SUMMARY.md            │ file │   3.7 KiB │ 3 days ago  │
# => │  2 │ Gemfile               │ file │   1.1 KiB │ 3 days ago  │
# => │  3 │ LICENSE               │ file │   1.1 KiB │ 3 days ago  │
# => │  4 │ CONTRIBUTING.md       │ file │     955 B │ 9 mins ago  │
# => │  5 │ books.md              │ file │     687 B │ 3 days ago  │
# => ...

これをするのに、 ls にコマンドライン引数を渡してはいないことが確認できます。代わりに、 Nu が ls コマンドの出力をソートするために提供している sort-by コマンドを使用しています。また、最も大きいファイルが一番上に来るように、 reverse も使用しています。

Nu はテーブルを操作するコマンドを多数提供しています。例えば、 where を使用して ls テーブルのコンテンツをフィルターすることができるので、1キロバイトを超えるファイルのみを表示することができます。

ls | where size > 1kb
# => ╭───┬───────────────────┬──────┬─────────┬────────────╮
# => │ # │       name        │ type │  size   │  modified  │
# => ├───┼───────────────────┼──────┼─────────┼────────────┤
# => │ 0 │ Gemfile           │ file │ 1.1 KiB │ 3 days ago │
# => │ 1 │ Gemfile.lock      │ file │ 6.9 KiB │ 3 days ago │
# => │ 2 │ LICENSE           │ file │ 1.1 KiB │ 3 days ago │
# => │ 3 │ SUMMARY.md        │ file │ 3.7 KiB │ 3 days ago │
# => ╰───┴───────────────────┴──────┴─────────┴────────────╯

Unix の哲学と同様、互いに対話可能なコマンドにより、さまざまな異なる組み合わせの使用が可能になります。では、別のコマンドを見てみましょう。

ps
# => ╭─────┬───────┬───────┬──────────────────────────────────────────────┬─────────┬───────┬──────────┬──────────╮
# => │   # │  pid  │ ppid  │                     name                     │ status  │  cpu  │   mem    │ virtual  │
# => ├─────┼───────┼───────┼──────────────────────────────────────────────┼─────────┼───────┼──────────┼──────────┤
# => │   0 │ 87194 │     1 │ mdworker_shared                              │ Sleep   │  0.00 │  25.9 MB │ 418.0 GB │
# => │   1 │ 87183 │  2314 │ Arc Helper (Renderer)                        │ Sleep   │  0.00 │  59.9 MB │   1.6 TB │
# => │   2 │ 87182 │  2314 │ Arc Helper (Renderer)                        │ Sleep   │  0.23 │ 224.3 MB │   1.6 TB │
# => │   3 │ 87156 │ 87105 │ Code Helper (Plugin)                         │ Sleep   │  0.00 │  56.0 MB │ 457.4 GB │
# => ...

もし Linux を使用したことがあるなら、 ps コマンドは馴染みがあるでしょう。これを使用して、システム上で現在実行されている全てのプロセスのリストと、それらのステータス、名前を取得することができます。プロセスのCPU使用率を見ることもできます。

いま表示したいのは、CPUをたくさん使用しているプロセスですか? ls コマンドで以前したのと同じように、 ps コマンドが返したテーブルに対しても操作することができます。

ps | where cpu > 5
# => ╭───┬───────┬───────┬─────────────────────────────────────────┬─────────┬───────┬──────────┬──────────╮
# => │ # │  pid  │ ppid  │                  name                   │ status  │  cpu  │   mem    │ virtual  │
# => ├───┼───────┼───────┼─────────────────────────────────────────┼─────────┼───────┼──────────┼──────────┤
# => │ 0 │ 86759 │ 86275 │ nu                                      │ Running │  6.27 │  38.7 MB │ 419.7 GB │
# => │ 1 │ 89134 │     1 │ com.apple.Virtualization.VirtualMachine │ Running │ 23.92 │   1.5 GB │ 427.3 GB │
# => │ 2 │ 70414 │     1 │ VTDecoderXPCService                     │ Sleep   │ 19.04 │  17.5 MB │ 419.7 GB │
# => │ 3 │  2334 │     1 │ TrackpadExtension                       │ Sleep   │  7.47 │  25.3 MB │ 418.8 GB │
# => │ 4 │  1205 │     1 │ iTerm2                                  │ Sleep   │ 11.92 │ 657.2 MB │ 421.7 GB │
# => ╰───┴───────┴───────┴─────────────────────────────────────────┴─────────┴───────┴──────────┴──────────╯

いま、ls と ps を使用してファイルとプロセスのリストを表示しました。Nu はほかにも有用な情報をもつテーブルを作成するコマンドを提供しています。次は、 date と sys について見てみましょう。

date now を実行すると、現在の日時に関する情報が得られます。

date now
# => 2022-03-07 14:14:51.684619600 -08:00

テーブルとして取得したい場合は、これを date to-table に渡します。

date now | date to-table
# => ╭───┬──────┬───────┬─────┬──────┬────────┬────────┬──────────╮
# => │ # │ year │ month │ day │ hour │ minute │ second │ timezone │
# => ├───┼──────┼───────┼─────┼──────┼────────┼────────┼──────────┤
# => │ 0 │ 2022 │     3 │   7 │   14 │     45 │      3 │ -08:00   │
# => ╰───┴──────┴───────┴─────┴──────┴────────┴────────┴──────────╯

sys を実行すると、 Nu が実行されているシステムに関する情報が得られます。

sys
# => ╭───────┬───────────────────╮
# => │ host  │ {record 6 fields} │
# => │ cpu   │ [table 4 rows]    │
# => │ disks │ [table 3 rows]    │
# => │ mem   │ {record 4 fields} │
# => │ temp  │ [table 1 row]     │
# => │ net   │ [table 4 rows]    │
# => ╰───────┴───────────────────╯

これはいままでに見たテーブルと少し異なります。 sys コマンドは、単純な値の代わりに構造化されたテーブルをセルに持つテーブルを返します。このデータを覗くには、カラムを get する必要があります。

sys | get host
# => ╭────────────────┬────────────────────────╮
# => │ name           │ Debian GNU/Linux       │
# => │ os version     │ 11                     │
# => │ kernel version │ 5.10.92-v8+            │
# => │ hostname       │ lifeless               │
# => │ uptime         │ 19day 21hr 34min 45sec │
# => │ sessions       │ [table 1 row]          │
# => ╰────────────────┴────────────────────────╯

get コマンドを使用すると、テーブルのカラムの内容にジャンプすることができます。この例では、 Nu が実行されているホストに関する情報が含まれる "host" カラムを見ています。OSの名前、ホスト名、CPUなどです。では、システム上に存在するユーザーの名前を取得してみましょう。

sys | get host.sessions.name
# => ╭───┬──────────╮
# => │ 0 │ sophiajt │
# => ╰───┴──────────╯

いま、システムには "sophiajt" という名前のユーザー一人だけがいます。ここで、ただのカラム名ではなく、カラムのパス( host.sessions.name の部分)を渡していることに気づくでしょう。Nu はカラムのパスを受け取って、テーブル中の対応する部分に移動します。

もう一つ違いがあることに気づいたかもしれません。データのテーブルではなく、文字列 "sophiajt" という、ただ一つの要素を受け取っています。Nu はデータのテーブルでも、文字列でも動作します。文字列は Nu の外部コマンドで作業する際の重要な役割を担います。

実際に Nu の外部での文字列の働きを見てみましょう。先程の例にならい、echo コマンド( ^ は Nu に、ビルトインの echo コマンドを使用しないことを伝えます)を実行してみます

sys | get host.sessions.name | each { |elt| ^echo $elt }
# => sophiajt

これが前に試したものとよく似ているように見えるなら鋭いです!これは似ていますが、一つ重要な違いがあります。先程の値で ^echo を呼び出しました。これで、データをNu から echo (あるいは git のような、あらゆる Nu の外部のコマンド)に渡すことができるのです。

ヘルプの取得

Nu のビルトインコマンド全てのヘルプテキストは、 help で見つけることができます。すべてのコマンドを見たい場合は、 help commands を実行してください。また、 help -f <topic> を実行すれば、あるトピックについて検索することもできます。

help path
# => Explore and manipulate paths.
# => 
# => There are three ways to represent a path:
# => 
# => * As a path literal, e.g., '/home/viking/spam.txt'
# => * As a structured path: a table with 'parent', 'stem', and 'extension' (and
# => * 'prefix' on Windows) columns. This format is produced by the 'path parse'
# =>   subcommand.
# => * As an inner list of path parts, e.g., '[[ / home viking spam.txt ]]'.
# =>   Splitting into parts is done by the `path split` command.
# => 
# => All subcommands accept all three variants as an input. Furthermore, the 'path
# => join' subcommand can be used to join the structured path or path parts back into
# => the path literal.
# => 
# => Usage:
# =>   > path
# => 
# => Subcommands:
# =>   path basename - Get the final component of a path
# =>   path dirname - Get the parent directory of a path
# =>   path exists - Check whether a path exists
# =>   path expand - Try to expand a path to its absolute form
# =>   path join - Join a structured path or a list of path parts.
# =>   path parse - Convert a path into structured data.
# =>   path relative-to - Get a path as relative to another path.
# =>   path split - Split a path into parts by a separator.
# =>   path type - Get the type of the object a path refers to (e.g., file, dir, symlink)
# => 
# => Flags:
# =>   -h, --help
# =>       Display this help message
GitHubでこのページを編集する
Contributors: yukitomoda, sophiajt
Prev
Default Shell
Next
システム内の移動