連続処理させるスクリプトを作るときにC言語でコンパイルしたものよりシェルスクリプトを使うと遅くなる。
原因は演算速度よりもファイルへのアクセス速度の問題でシェルスクリプトではファイルをいちいち開け閉めするからである。
そこでこんな感じにしたいと思う。
http://mugos.ums.ac.id/pub/artikel/debian-www/doc/manuals/reference/ch-program.ja.html
13.2.4 シェルリダイレクト
こうすれば何ぼかましになるであろう。
原因は演算速度よりもファイルへのアクセス速度の問題でシェルスクリプトではファイルをいちいち開け閉めするからである。
そこでこんな感じにしたいと思う。
http://mugos.ums.ac.id/pub/artikel/debian-www/doc/manuals/reference/ch-program.ja.html
13.2.4 シェルリダイレクト
覚えておくべき基本的な リダイレクト を次に挙げます。 (ここで [<var>n</var>] はファイルディスクリプタを指定するための任意の 番号)
[<var>n</var>]> <var>file</var> stdout (又は<var>n</var>) を <var>file</var> にリダイレクト。 [<var>n</var>]>> <var>file</var> stdout (又は<var>n</var>) を <var>file</var> に追加 [<var>n</var>]< <var>file</var> <var>file</var> から stdin (又は<var>n</var>) にリダイレクト [<var>n1</var>]>&<var>n2</var> stdout (又は <var>n1</var>) を <var>n2</var> にリダイレクト 2> <var>file</var> >&2 stdout と stderr を <var>file</var> にリダイレクト > <var>file</var> 2>&1 stdout と stderr を <var>file</var> にリダイレクト | <var>command</var> stdout を <var>command</var> にパイプする 2>&1 | <var>command</var> stderr と stdout を <var>command</var> にパイプする
ここで、
-
stdin: 標準入力 (ファイルディスクリプタ = 0)
-
stdout: 標準出力 (ファイルディスクリプタ = 1)
-
stderr: 標準エラー出力 (ファイルディスクリプタ = 2)
です。
シェルは任意のファイルディスクリプタにより exec
組込み
コマンドを用いてファイルを開くことができます。
$ echo Hello >foo $ exec 3<foo 4>bar # ファイルを開く $ cat <&3 >&4 # 標準入力を 3, 標準出力を 4 にリダイレクト $ exec 3<&- 4>&- # ファイルを閉じる $ cat bar Hello
ここで <var>n</var><&- と <var>n</var>>&- はファイルディスクリプタ <var>n</var> を閉じることを意味します。
こうすれば何ぼかましになるであろう。
※コメント投稿者のブログIDはブログ作成者のみに通知されます