GNU/Linux >> Linux の 問題 >  >> Linux

Bashでリダイレクト演算子を使用する5つの方法

データはstdinを介してコンピューターに入力されます (通常はキーボード)、結果の出力は stdoutに送られます (通常はシェル)。これらの経路はストリームと呼ばれます 。ただし、これらの入力位置と出力位置を変更して、コンピューターが stdin以外の場所から情報を取得する可能性があります。 または、 stdout以外の場所に結果を送信します 。この機能は、リダイレクトと呼ばれます。 。

この記事では、 stderr 用の1つを含む、5つのリダイレクト演算子について学習します。 。それぞれの例を示し、独自のLinuxシステムで複製できる方法で資料を提示しました。

通常の出力>演算子

出力リダイレクタは、おそらく最も認識されている演算子です。標準出力( stdout )は通常、ターミナルウィンドウにあります。たとえば、 dateを入力すると コマンドを実行すると、結果の日時出力が画面に表示されます。

[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$

ただし、この出力を stdoutからリダイレクトすることは可能です。 どこかに。この場合、結果をspecifications.txtという名前のファイルにリダイレクトします。 。 catを使用して機能することを確認します ファイルの内容を表示するコマンド。

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$ 

>の問題 リダイレクタは、ファイル内の既存のデータを上書きすることです。この段階で、 date ができました specifications.txtの情報 ファイルでしょ? hostname> configuration.txtと入力した場合 、出力はテキストファイルに送信されますが、前の手順の既存の日時情報が上書きされます。

[damon@localhost ~]$ hostname > specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
localhost.localdomain
[damon@localhost ~]$ 

>でトラブルが発生しやすい 誤って既存の情報を上書きすることによるリダイレクタ。

[読者も楽しんだ:知っておく必要のある10の基本的なLinuxコマンド]

通常の出力追加>>演算子

追加の>> オペレーターは、出力を上書きするのではなく、既存のコンテンツに追加します。これにより、複数のコマンドからの出力を1つのファイルにリダイレクトできます。たとえば、 dateの出力をリダイレクトできます >を使用して 演算子を入力してから、 hostnameをリダイレクトします およびuname-r specifications.txt>>を使用してファイルする オペレーター。

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt 
[damon@localhost ~]$ uname -r >> specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$ 

>> リダイレクタは空のファイルでも機能します。つまり、おそらく

通常の>は無視してください データを上書きする可能性を軽減し、常に>>に依存するリダイレクタ 代わりにリダイレクタ。入るのは悪い習慣ではありません。

通常の入力<演算子

入力リダイレクタは、指定されたソースからストリーム内のデータをプルします。通常、プログラムはキーボードから入力を受け取ります。ただし、データはファイルなどの別のソースから取得できます。

sortを使用して例を作成します。 指図。まず、 mylist.txtという名前のテキストファイルを作成します 次の行が含まれています:

cat
dog
horse
cow

動物がではないことを確認します アルファベット順に記載されています。

それらを順番にリストする必要がある場合はどうなりますか?ファイルの内容をsortにプルできます <を使用したコマンド オペレーター。

[damon@localhost ~]$ sort < mylist.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

少し凝ったものになって、ソートされた結果を新しいファイルにリダイレクトすることもできます:

[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

通常のエラー2>演算子

stdout 期待される結果を表示します。エラーが発生した場合は、別の方法で管理されます。エラーはファイル記述子2としてラベル付けされます(標準出力はファイル記述子1です)。プログラムまたはスクリプトが期待どおりの結果を生成しない場合、エラーがスローされます。エラーは通常、 stdoutに送信されます 、ただし、別の場所にリダイレクトできます。 stderr 演算子は2>です (ファイル記述子2の場合)。

スペルミスのpingを使用した簡単な例を次に示します。 コマンド:

[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$

これは、エラー出力が / dev / nullにリダイレクトされた同じスペルミスのコマンドです。 :

[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$ 

結果のエラーメッセージは/dev / nullにリダイレクトされます stdoutの代わりに 、したがって、結果やエラーメッセージは画面に表示されません。

/ dev / null 、またはビットバケット 、コマンドラインのゴミ箱として使用されます。不要な出力をこの場所にリダイレクトして、単に表示しないようにすることができます。たとえば、スクリプトを作成していて、その機能の一部をテストしたいが、開発のこの段階では気にしないエラーがスローされることがわかっているとします。スクリプトを実行して、エラーを / dev / nullにリダイレクトするように指示できます。 便宜上。

パイプ|オペレーター

Ken Hessは、パイプの使用に関する確かな記事をすでに持っています | オペレーターなので、ここでは非常に簡単なデモンストレーションのみを示します。

パイプは最初のコマンドの出力を受け取り、それを2番目のコマンドの入力にします。 / etc内のすべてのディレクトリとファイルのリストを表示したい場合があります ディレクトリ。これは長いリストになり、ほとんどの出力が画面の上部からスクロールして外れることをご存知でしょう。 少ない コマンドは出力をページに分割し、ページを上または下にスクロールして結果を表示できます。構文は、 lsを発行することです。 / etcの内容を一覧表示するコマンド 、次にパイプを使用してそのリストを lessに送信します ページに分割できるようにします。

[damon@localhost ~]$ ls /etc | less

ケンの記事には、さらに多くの優れた例があります。個人的には、コマンドを使用しています。 |少ない およびコマンド | grep string 最も頻繁に。

[今すぐダウンロード:システム管理者によるBashスクリプトのガイド。 ]

まとめ

リダイレクト演算子は非常に便利です。この簡単な要約が、入力と出力を操作するためのいくつかのトリックを提供してくれることを願っています。重要なのは、> 演算子は既存のデータを上書きします。


Linux
  1. Nginxを使用してリダイレクトする方法

  2. $((Expr))の代わりに$ [Expr]を使用しますか?

  3. BashスクリプトでCdを使用できないのはなぜですか?

  1. Bashスクリプトに.shまたは.bash拡張子を使用しますか?

  2. Bashスクリプト内で変数を使用する珍しい方法

  3. bashでkill SIGUSR2を使用するには?

  1. Bash履歴コマンドの使用方法

  2. どのシェルを使用する必要がありますか– Tcsh Vs Bash ??

  3. Bashでの$#の使用は何ですか