質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Less

LessはCSSをシンプルかつ効率よく書くための、 CSSメタ言語の1つです。 lessで変数宣言を行う場合、@から宣言します。

Q&A

解決済

1回答

391閲覧

Linuxのパイプの原理が分かりません。

y97

総合スコア10

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Less

LessはCSSをシンプルかつ効率よく書くための、 CSSメタ言語の1つです。 lessで変数宣言を行う場合、@から宣言します。

0グッド

0クリップ

投稿2020/08/09 04:31

$ echo tera tail |grep tera
「echo teratail」の標準出力を「grep tera」の標準入力につなぐ。

$ echo tera tail|awk '{print $1}'
最初のコマンドと同じ原理

$ echo tera tail |sed 's/t/T/g'
最初のコマンドと同じ原理

$ echo tera tail|less
最初のコマンドと同じ原理

このように「echo tera tail」の標準出力を受け取れるのはその後のコマンドが標準入力を受け取るからだと思うのですが、その後のコマンドを叩いてみると

$ grep tera
標準入力を受け取る

$ awk '{print $1}'
標準入力を受け取る

$ sed 's/t/T/g'
標準入力を受け取る

$ less
** これだけ標準入力を受け取らない。 **

「標準入力を受け取るコマンドのみパイプにつなぐことができる。」という自分の考えが間違っているのか、「lessだけ特別扱いなのか」分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

標準入力を受け取るコマンドのみパイプにつなぐことができる。

合ってます。

プログラムは、標準入力や標準出力が何につながっているかを知ることが出来ますので、それらが端末なのか、ファイルにリダイレクトされているのか、パイプなのかを調べて動作を変えることが出来ます。

lessの場合は、コマンドラインでファイル名が指定されておらず、標準入力が端末の場合は、お書きのメッセージを出して終了するように作られています。

他には、標準出力の例ですが、/bin/ls/bin/ls | catは、ファイルが複数ある場合表示形式が違います。これはlsが標準出力が端末かどうかによって動作を変えているためです。

投稿2020/08/09 04:42

編集2020/08/09 04:43
otn

総合スコア84542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y97

2020/08/09 05:07 編集

lessの場合は、コマンドラインでファイル名が指定されておらず、標準入力が端末の場合は、お書きのメッセージを出して修了するように作られています。 ---------------------------------------------- 回答ありがとうございます。良くわかりました。ひとつ質問なのです。 ということはlessは標準入力が「端末」からか「他のコマンドの標準出力」からか見分けているということでよろしいでしょうか?
Daregada

2020/08/09 05:08

ファイル名に「-」をひとつ指定すると、lessも端末からの標準入力を受け取りますよ。動作は大して面白いものではありませんが(1画面分キー入力するとプロンプト「:」を表示する)。
otn

2020/08/09 07:45

> lessは標準入力が「端末」からか「他のコマンドの標準出力」からか見分けている 「他のコマンドの標準出力」じゃなくて「パイプ」ですね。 > それらが端末なのか、ファイルにリダイレクトされているのか、パイプなのかを調べて と書いたとおりです。
y97

2020/08/09 08:08 編集

Daregadaさん、otnさんありがとうございました。 疑問が解消されました。わかりやすい説明をありがとうございます。
otn

2020/08/09 08:07

なお、「パイプ」は2つの意味があり、1つは今回の質問のシェルのコマンドラインでのパイプ、もう1つはUnix/Linuxのシステムコールのpipeです。前者は後者を使って実現されています。
y97

2020/08/09 08:11

> なお、「パイプ」は2つの意味があり、1つは今回の質問のシェルのコマンドラインでのパイプ、もう1つはUnix/Linuxのシステムコールのpipeです。前者は後者を使って実現されています。 そうなんですね。Unix/Linuxのシステムコールのpipeというものがあるのですね。調べてみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問