再びbashリダイレクト:2つの同様のコマンドを理解するのが難しい問題

再びbashリダイレクト:2つの同様のコマンドを理解するのが難しい問題

誰かが次の理由を説明できることを願っています。する働く:

# < /dev/urandom  tr -dc 'a-zA-Z' | head -c 12

以前「|」なしティーしかし、次のような場合はそうではありません。

# < /dev/urandom | tr -dc 'a-zA-Z' | head -c 12

(これは単純なパスワードジェネレータです)

以下とどのように異なるかを説明することもできます。

# gunzip < HP-Fax4-hpcups.ppd.gz cat > ouT1 --- もちろんこれは失敗します。

gzip: cat.gz: No such file or directory 

ただし、catの前に「|」を除外すると、(pipe)の前に「|」と一緒に使用できますcat

 # gunzip < HP-Fax4-hpcups.ppd.gz | cat >  ouT1

答え1

  1. 何ですか<

    ファイルから読み取るためにコマンド入力をリダイレクトすることです。コマンドの前または後に置くことができます。

    $ echo abcd > in
    $ cat in
    abcd
    $ cat <in
    abcd
    $ <in cat
    abcd
    

    簡単に言えば、このコマンドはファイルを読み取ります。cat inとの違いcat <inは、<プロセスに対して標準入力(STDIN)のリダイレクトを設定するのではなく、コマンドが内部的に操作を実行する必要があるパラメータであることcatです。 (開いて読んでください。)cat inincat

  2. 何ですか|

    プロセスのリダイレクトです。次のコマンドのみに従うことができます。

    $ | cat in
    bash: syntax error near unexpected token `|'
    $ cat in | cat
    abcd
    $ cat in | cat |
    > 
    

    (...入力を待っています...)

  3. これは何をするか: か< /dev/urandom tr -dc 'a-zA-Z' | head -c 12

    より小さな部分に分けてください(リダイレクトを含むコマンド)。

    • < /dev/urandom tr -dc 'a-zA-Z'=tr -dc 'a-zA-Z'< /dev/urandom

      意味: 読んだ内容の翻訳ですurandom

    • |- 匿名パイプを使用してプロセスにリダイレクト

    • head -c 12- リダイレクトを受ける過程です。

    この行全体が意味をなさないのですか?

  4. これは何ですか:< /dev/urandom | tr -dc 'a-zA-Z' | head -c 12か。

    分解:

    • < /dev/urandom-注文不可そしてからリダイレクト/dev/urandom
    • |- 匿名パイプを使用してプロセスにリダイレクト
    • tr -dc 'a-zA-Z'- リダイレクトを受けるプロセス
    • など...

    どうなりますか?最初の「文」にはコマンドはありません。

  5. 何ですか>

    これにより、このコマンドの出力がファイルにリダイレクトされます。と同じで、<コマンドの前後に使用できます。

    $ >out echo abcd
    $ cat out
    abcd
    $ echo dcba >tuo
    $ cat tuo
    dcba
    
  6. これは何をするか: かgunzip < HP-Fax4-hpcups.ppd.gz | cat > ouT1

    分析する:

    • gunzip < HP-Fax4-hpcups.ppd.gz=HP-Fax4-hpcups.ppd.gz次にリダイレクト(このファイルを読みgunzipます)gunzip
    • |- 出力をプロセスにリダイレクト
    • cat > ouT1=はcatリダイレクトを受け取り、その出力をファイルにリダイレクトするプロセスです。ouT1

    大丈夫です。すべての部分が意味があります。

  7. だからこれは何ですか:gunzip < HP-Fax4-hpcups.ppd.gz cat > ouT1

    関係するすべての当事者がこれについてどのように言うべきかを100%確信することはできませんが、推測してみましょう。エラーは次のとおりです。

    gzip: cat.gz: No such file or directory 
    

    このエラーの最初の単語は、gzipgzipが実行されたことを知らせることです。我々はまた、注文を解釈する前に販売によってリダイレクトが確立されることを知っています(少なくとも私は知っています)。だから私はこのように分析します。

    • < HP-Fax4-hpcups.ppd.gz-shellはプロセス入力リダイレクトをHP-Fax4-hpcups.ppd.gzieに設定します。実行するコマンドはこのファイルから読み込まれます。
    • > ouT1- コマンドの出力は次にリダイレクトされます。ouT1

    今まではそんなに良くなった。今テーブルに残ったのはですgunzip cat。これの標準的な説明は、これがコマンドであり引数であるというgunzipことcatです。gunzipIN と OUT リダイレクトが設定された状態で実行され、最初の引数としてcat文字列を取得します。何とかエラーが発生します。

    gzip: cat.gz: No such file or directory
    

    またどういう意味ですか?gzip見つかりませんでしたcat.gz。そのファイルで何かをしたいのですが(開く可能性が高い)、そのようなファイルやディレクトリはありません。したがって、それを引数としてcat.gz使用する理由は内部的な問題であるに違いありません。cat簡単な実験では、gzip形式の引数が必要であることを示しています。

    $ echo asdf > cat.gz
    $ gunzip < in  cat >  ouT1
    
    gzip: cat.gz: not in gzip format
    

    ここのファイルはin単純なテキストファイルなので、空行があるとします。

関連情報