パイプライン
Nu のコアデザインのひとつがパイプラインです。パイプラインは Unix の背後にある哲学にまでそのルーツを遡ることができるデザインアイデアです。Nu は、Unix の文字列データを拡張したように、パイプラインの概念も拡張してテキスト以外のものも扱えるようにします。
基礎
パイプラインは、入力、フィルター、出力の3つの部分から構成されます。
> open "Cargo.toml" | inc package.version | save "Cargo_new.toml"
最初のコマンドopen "Cargo.toml"
が入力です(しばしば"source"や"producer"と呼ばれます)。これによりデータが作成またはロードされパイプラインに送られます。パイプラインは入力から渡された値を扱います。ls
のようなコマンドも入力です。ファイルシステムからデータを取得し、パイプラインを経由して扱えるようにするからです。
2番目のコマンドinc package.version
はフィルターです。フィルターは与えられたデータをうけとると大抵の場合はなにかします。それは変更(inc
コマンドの例のように)であったり、ロギングなどの別の操作かもしれません。
最後のコマンドsave "Cargo_new.toml"
が出力です("sink"と呼ばれることもあります)。出力はパイプラインから入力を受け取り、最終的な操作を実行します。この例では、最終ステップとして、パイプラインを介しておくられてきたものをファイルに保存しています。他の出力コマンドとしては、値をうけとりユーザのために表示するものがあります。
外部コマンドの使用
Nu のコマンドは互いに Nu のデータ型(types of dataを参照してください)を利用してやりとりします。しかし、Nu 以外のコマンドはどうでしょうか。外部コマンドの使用例をみてみましょう。
internal_command | external_command
データは内部コマンドから外部コマンドにむかって流れます。このデータは文字列であることが期待されるので、外部コマンドのstdin
に送られます。
external_command | internal_command
外部コマンドから Nu に送られるデータは単一の文字列にまとめられ、内部コマンドに渡されます。lines
のようなコマンドは外部からのデータを取り込む際に便利です。
external_command_1 | external_command_2
Nu は Bash のような他のシェルと同じように2つの外部コマンドでパイプされるデータを処理します。外部コマンド1のstdout
は外部コマンド2のstdin
につながれます。これにより2つのコマンドの間でデータは自然にやりとりされます。
内部の仕組み
ls
が出力ではなく入力の場合、テーブルがどのように表示されるのか疑問に思われるかもしれません。Nu はautoview
とよばれるコマンドを自動的に出力に加えます。autoview
コマンドは結果を確認できる出力をもたないパイプラインに追加されるのです。
実質的にこのコマンドと
> ls
このパイプラインは
> ls | autoview
同じものです。