タグ

コマンドラインに関するMichaeLのブックマーク (3)

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

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

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
  •   入出力の切り換え(I/O redirection)

    シェルは起動したコマンドの入出力先を切り換える機能(I/Oリダイレクト)を持っ ています。シェルはコマンドラインを解釈し、リダイレクトを表す 特殊な文字 >、<、>> が見つかるとそれに従った処理 を行います。仮に $ echo It will rain tomorrow >memo それに続く語で指定されたファイルに(この場合はmemo)出力先を変更します。 この例ではカレントディレクトリにmemoというファイルを作り、そこにechoの出力 を書き出します。結果としてファイル ./memoに "It will rain tomorrow" が書き込 まれることになります。 もし、この時にファイル ./memoがなければ新たに作られますし、既にある時には 上書きされて古い内容は失われます。 ここで大切なことは、シェルはコマンドラインで指定されたコマンドの 実行を開始する前 にその標準出力を

  •   エラー出力を標準出力にマージする

    標準出力の記録とエラー履歴を一緒に取るためにコマンドラインで次のような記述 をすると思います。 $ command >foo 2>&1 この動作を追いかけてみます。リダイレクト機能表でも分かるように >& の 働きは、左側に書かれたファイルディスクリプタの出力を右側に書かれたファイルディ スクリプタに変更することです。 シェルは標準入力・標準出力・エラー出力の3つのファイルをオープンしています。 そして、それらをファイルディスクリプタ0、1、2として管理しています。 ですから 2>&1 はファイルディスクリプタ2を1に、つまりエラー出力を標準 出力に変更することになります。さらに、>foo として標準出力がfooにリダイレク トされていますから、fooには標準出力とエラー出力がマージされたものが書き出され ることになります。 リダイレクトのメカニズムを理解する上で大切なことは、コマンドライ

  • 1