Linux
パイプ
標準入出力

標準入出力と引数の違いがわかっていなかった。(あとパイプの存在を初めて認識した)

まずIT用語辞典を見てみる。

標準入力
読み方:ひょうじゅんにゅうりょく
【英】Standard Input
標準入力とは、UNIX環境でのキーボードに相当する装置のことである。

UNIX上で動作するプログラムは標準入力への読み込み要求を発行することで、キーボードからのデータを受け取ることができる。ファイルポインタはstdin、ファイル記述子は0が割り当てられている。キーボードからデータを受け取る代わりに、ファイルからデータを標準入力として受け取ることができる。このような操作はリダイレクトと呼ばれる。

UNIX上で動作するプログラムには、標準入力・標準出力・標準エラー出力の3つが暗黙的に割り当てられる
https://www.weblio.jp/content/%E6%A8%99%E6%BA%96%E5%85%A5%E5%8A%9B


標準出力
読み方:ひょうじゅんしゅつりょく
【英】Standard Output
標準出力とは、UNIX環境でのディスプレイに相当する装置のことである。

UNIX上で動作するプログラムは標準出力への書き込み要求を発行することで、ディスプレイ装置にデータを表示することができる。ファイルポインターはstdout、ファイル記述子は1が割り当てられている。ディスプレイ装置へデータを表示する代わりに、標準出力へのデータをファイルやプリンタなどのデバイスに出力することができる。このような操作をリダイレクトと呼ぶ。

UNIX上で動作するプログラムには、標準入力・標準出力・標準エラー出力の3つが暗黙的に割り当てられる。
https://www.weblio.jp/content/%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B


引数 【 argument 】 args / アーギュメント
目次
概要
実引数
仮引数
可変長引数
関連用語
引数とは、プログラム中で関数やメソッド、サブルーチンなどを呼び出すときに渡す値のこと。渡された側はその値に従って処理を行い、結果を返す。OSなどで利用者がコマンドを実行する際に指定するパラメータなどを指すこともある(コマンドライン引数)。
http://e-words.jp/w/%E5%BC%95%E6%95%B0.html

標準入力:linuxに渡す
引数;関数・メソッド等に渡す
てことですね。

値を受け取っているものが何かが大事。

(例)

echo "hello"
hello

linuxコマンド"echo"を使っている。
linuxにhelloを渡して(標準入力)そのまま帰ってくる(標準出力)。

てことですね。

でも、この記述

引数
OSなどで利用者がコマンドを実行する際に指定するパラメータなどを指すこともある(コマンドライン引数)。

コマンドライン引数と標準入力の違いがわかりにくい。

コマンドライン引数でググると予測検索として各種プログラム言語が出てきます。

ターミナルからプログラムを実行時に引数を渡すのが、コマンドライン引数です。

rubyだと次のように受け取ります。

example.rb
puts ARGV[0]
$ ruby example.rb "command line"
command line

rubyプログラムそのものに渡していますね。linuxに渡しているわけではないのでこれを標準入力とは言わないです。

パイプ|

パイプは、linuxコマンドを組み合わせることができる。

(例)
lsコマンドとsortコマンドを組み合わせてフォルダ内を逆順ソートして出力。

$ ls -1|sort -r
ruby_test
html_test
css

同じ操作を、
・引数を使う
・標準入出力を使う

2種類の操作でやって見ます。(jsonファイルをjqで整形する)

1.

$cat meibo.json | jq .

linuxコマンドcatを使っています。
linuxにmeibo.jsonを渡し(標準入力)、それをパイプでjqに渡しています。

2.

$ jq "." meibo.json

jqコマンドの引数にmeibo.jsonを指定しています。
jqはコマンドラインツールです。linux用に誰かが書いた便利プログラム。linuxそのものに渡しているわけではありません。標準入力ではなく引数ですね。

そのコマンドが、何を対象にしているかきちんと把握しなければいけませんね。。
よく意味もわからずコマンドをコピペしちゃうことがありました。
当たり前のことができていなかったと感じます