タグ

リダイレクトとシェルに関するakaneharaのブックマーク (4)

  • シェルのリダイレクトの補遺 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日書いた「シェルのリダイレクトを『こわいものなし』というくらい完全に理解しよう」に、随分とブックマークやトラックバックをいただきました。それらのフィードバックを拝見して、僕の説明にいたらない所があったと思いますので、ここで補足します。 コマンド実行単位≒simple command パイプ記号「|」や逐次実行の記号「;」を含んだ長いコマンドラインも、1つのコマンドとその引数、それとリダイレクト指定からなる“成分”に分解できます。こういった成分をなんと呼ぶか僕は知らないので、仮に「コマンド実行単位」とでも呼びましょう。 シェルの構文(grammar)的概念としてsimple commandというものがあります。ここで言ったコマンド実行単位は、ほぼsimple commandだと言っていいでしょう。「ほぼ」と付けたのは次の理由からです; 「コマンド実行単位」は、1つのプロセスを起動することを

    シェルのリダイレクトの補遺 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • リダイレクトとパイプを図示してみた (3) - とあるソフトウェア開発者のブログ

    前々回、前回の続きです。今回は、様々なリダイレクトやパイプを組み合わせた複雑なケースを説明します。 前回: id:simply-k:20100801:1280617927 補足: id:simply-k:20100803:1280796958 (11) コマンドA 2>&1 | コマンドB リダイレクトとパイプを組み合わせたケースです。2段階に分割して考えます。 (11-1) 「コマンドA 2>&1」、「コマンドB」 パイプの前後のコマンドを単独実行する場合です。「コマンドA 2>&1」では、コマンドAの標準エラー出力を、標準出力にリダイレクトします。このため、コマンドAの標準出力のデータと標準エラー出力のデータは、まとめて標準出力(stdout-a)に出力されます。「コマンドB」は、リダイレクトの無い、通常のコマンド実行です。 (11-2) コマンドA 2>&1 | コマンドB 「コマン

    リダイレクトとパイプを図示してみた (3) - とあるソフトウェア開発者のブログ
  • 標準出力と標準エラー出力を入れ替える方法@bash

    標準出力と標準エラー出力を入れ替える方法を、結論だけを先に書くと 3>&2 2>&1 1>&3 というリダイレクトを行うと可能です。 以下は、あまりリダイレクトに詳しくない人向けに説明書いてみました。 ファイルディスクリプタは、0番が標準入力、1番が標準出力、2番が標準エラー出力です。例えば、index.html というファイルがあり、abc.htmlが無いディレクトリで以下のコマンドを実行したとすると、以下のように表示されます。 # ls -l index.html abc.html ls: cannot access abc.html: そのようなファイルやディレクトリはありません -rw-r--r-- 1 root root 0  4月 30 15:54 2012 index.html このとき、見た目はわかりませんが、結果1行目の”ls: cannot access abc.htm

    標準出力と標準エラー出力を入れ替える方法@bash
  • 1