diff --git a/ChangeLog b/ChangeLog index a7ab8057bc..296590507c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu May 17 19:07:14 2001 Akinori MUSHA + + * doc/shell.rd.jp: RD'ify and make some fixes. + + * doc/shell.rd: RD'ify, delete Japanese leftovers, make overall + English fixes, and sync with doc/shell.rd.jp. + Thu May 17 17:35:04 2001 Yukihiro Matsumoto * eval.c (rb_call0): address of local_vars might change during eval. diff --git a/doc/shell.rd b/doc/shell.rd index 437f035dec..02ee1b020a 100644 --- a/doc/shell.rd +++ b/doc/shell.rd @@ -1,240 +1,304 @@ -shell.rbユーザガイド + -- shell.rb $Release Version: 0.6.0 $ $Revision$ $Date$ by Keiju ISHITSUKA(keiju@ishitsuka.com) -* What's shell.rb? +=begin -It realizes a wish to do execution of command and filtering like -sh/csh. However, Control statement which include sh/csh just uses -facility of ruby. += What's shell.rb? -* Main classes -** Shell +It realizes a wish to do execution of commands with filters and pipes +like sh/csh by using just native facilities of ruby. -All shell objects have a each unique current directory. Any shell object -execute a command on relative path from current directory. += Main classes -+ Shell#cwd/dir/getwd/pwd current directory -+ Shell#system_path command path -+ Shell#umask umask +== Shell -** Filter +Every shell object has its own current working directory, and executes +each command as if it stands in the directory. -Any result of command exection is a Filter. Filter include Enumerable, -therefore a Filter object can use all Enumerable facility. +--- Shell#cwd +--- Shell#dir +--- Shell#getwd +--- Shell#pwd -* Main methods -** Command definition + Returns the current directory -For executing a command on OS, you need to define it as a Shell -method. +--- Shell#system_path -notice) Also, there are a Shell#system alternatively to execute the -command even if it is not defined. + Returns the command search path in an array -+ Shell.def_system_command(command, path = command) -Register command as a Shell method +--- Shell#umask -++ Shell.def_system_command "ls" - define ls -++ Shell.def_system_command "sys_sort", "sort" - define sys_sort as sort + Returns the umask -+ Shell.install_system_commands(pre = "sys_") +== Filter -Define all command of default_system_path. Default action prefix -"sys_" to the method name. +Any result of command exection is a Filter. Filter include +Enumerable, therefore a Filter object can use all Enumerable +facilities. -** 生成 += Main methods -+ Shell.new -Shell creates a Shell object of which current directory is the process -current directory. +== Command definitions -+ Shell.cd(path) -Shell creates a Shell object of which current directory is . +In order to execute a command on your OS, you need to define it as a +Shell method. -** Process management +Alternatively, you can execute any command via Shell#system even if it +is not defined. -+ jobs -The shell returns jobs list of scheduling. +--- Shell.def_system_command(command, path = command) -+ kill sig, job -The shell kill . + Defines a command. Registers as a Shell method + . -** Current directory operation + ex) + Shell.def_system_command "ls" + Defines ls. -+ Shell#cd(path, &block)/chdir -The current directory of the shell change to . If it is called -with an block, it changes current directory to the while its -block executes. + Shell.def_system_command "sys_sort", "sort" + Defines sys_sort as sort. -+ Shell#pushd(path = nil, &block)/pushdir +--- Shell.undef_system_command(command) -The shell push current directory to directory stack. it changes -current directory to . If the path is omitted, it exchange its -current directory and the top of its directory stack. If it is called -with an block, it do `pushd' the while its block executes. + Undefines a commmand -+ Shell#popd/popdir -The shell pop a directory from directory stack, and its directory is -changed to current directory. +--- Shell.alias_command(ali, command, *opts) {...} -** ファイル/ディレクトリ操作 + Aliases a command. -+ Shell#foreach(path = nil, &block) -Same as: - File#foreach (when path is a file) - Dir#foreach (when path is a directory) + ex) + Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars" + Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]} -+ Shell#open(path, mode) -Same as: - File#open(when path is a file) - Dir#open(when path is a directory) +--- Shell.unalias_command(ali) -+ Shell#unlink(path) -Same as: - Dir#open(when path is a file) - Dir#unlink(when path is a directory) + Unaliases a command. -+ Shell#test(command, file1, file2)/Shell#[command, file1, file] -Same as file testing function test(). -ex) - sh[?e, "foo"] - sh[:e, "foo"] - sh["e", "foo"] - sh[:exists?, "foo"] - sh["exists?", "foo"] +--- Shell.install_system_commands(pre = "sys_") -+ Shell#mkdir(*path) -Same as Dir.mkdir(its parameters is one or more) + Defines all commands in the default_system_path as Shell method, + all with
 prefixed to their names.
 
-+ Shell#rmdir(*path)
-Same as Dir.rmdir(its parameters is one or more)
+== Creation
 
-** Command execution
-+ System#system(command, *opts)
-The shell execure .
-ex)
-  print sh.system("ls", "-l")
-  sh.system("ls", "-l") | sh.head > STDOUT
+--- Shell.new
 
-+ System#rehash
-The shell do rehash.
+      Creates a Shell object which current directory is set to the
+      process current directory.
 
-+ Shell#transact &block
-The shell execute block as self.
-ex)
-  sh.transact{system("ls", "-l") | head > STDOUT}
+--- Shell.cd(path)
 
-+ Shell#out(dev = STDOUT, &block)
-The shell do transact, and its result output to dev.
+      Creates a Shell object which current directory is set to
+      .
 
-** Internal Command
-+ Shell#echo(*strings)
-+ Shell#cat(*files)
-+ Shell#glob(patten)
-+ Shell#tee(file)
+== Process management
 
-When these are executed, they return a filter object, which is a
-result of their execution.
+--- Shell#jobs
 
-+ Filter#each &block
-The shell iterate with each line of it.
+      Returns a list of scheduled jobs.
 
-+ Filter#<(src)
-The shell inputs from src. If src is a string, it inputs from a file
-of which name is the string. If src is a IO, it inputs its IO.
+--- Shell#kill sig, job
 
-+ Filter#>(to)
-The shell outputs to . If  is a string, it outputs to a file
-of which name is the string. If c is a IO, it outoputs to its IO.
+      Sends a signal  to .
 
-+ Filter#>>(to)
-The shell appends to . If  is a string, it is append to a file
-of which name is the string. If c is a IO, it is append to its IO.
+== Current directory operations
 
-+ Filter#|(filter)
-pipe combination
+--- Shell#cd(path, &block)
+--- Shell#chdir
 
-+ Filter#+(filter)
-filter1 + filter2 output filter1, and next output filter2.
+      Changes the current directory to .  If a block is given,
+      it restores the current directory when the block ends.
 
-+ Filter#to_a
-+ Filter#to_s
+--- Shell#pushd(path = nil, &block)
+--- Shell#pushdir
 
-** Built-in command
+      Pushes the current directory to the directory stack, changing
+      the current directory to .  If  is omitted, it
+      exchanges its current directory and the top of its directory
+      stack.  If a block is given, it restores the current directory
+      when the block ends.
 
-+ Shell#atime(file)
-+ Shell#basename(file, *opt)
-+ Shell#chmod(mode, *files)
-+ Shell#chown(owner, group, *file)
-+ Shell#ctime(file)
-+ Shell#delete(*file)
-+ Shell#dirname(file)
-+ Shell#ftype(file)
-+ Shell#join(*file)
-+ Shell#link(file_from, file_to)
-+ Shell#lstat(file)
-+ Shell#mtime(file)
-+ Shell#readlink(file)
-+ Shell#rename(file_from, file_to)
-+ Shell#split(file)
-+ Shell#stat(file)
-+ Shell#symlink(file_from, file_to)
-+ Shell#truncate(file, length)
-+ Shell#utime(atime, mtime, *file)
+--- Shell#popd
+--- Shell#popdir
 
-These have a same function as a class method which is in File with same name.
+      Pops a directory from the directory stack, and sets the current
+      directory to it.
 
-+ Shell#blockdev?(file)
-+ Shell#chardev?(file)
-+ Shell#directory?(file)
-+ Shell#executable?(file)
-+ Shell#executable_real?(file)
-+ Shell#exist?(file)/Shell#exists?(file)
-+ Shell#file?(file)
-+ Shell#grpowned?(file)
-+ Shell#owned?(file)
-+ Shell#pipe?(file)
-+ Shell#readable?(file)
-+ Shell#readable_real?(file)
-+ Shell#setgid?(file)
-+ Shell#setuid?(file)
-+ Shell#size(file)/Shell#size?(file)
-+ Shell#socket?(file)
-+ Shell#sticky?(file)
-+ Shell#symlink?(file)
-+ Shell#writable?(file)
-+ Shell#writable_real?(file)
-+ Shell#zero?(file)
+== File and directory operations
 
-These have a same function as a class method which is in FileTest with
-same name. 
+--- Shell#foreach(path = nil, &block)
 
-+ Shell#syscopy(filename_from, filename_to)
-+ Shell#copy(filename_from, filename_to)
-+ Shell#move(filename_from, filename_to)
-+ Shell#compare(filename_from, filename_to)
-+ Shell#safe_unlink(*filenames)
-+ Shell#makedirs(*filenames)
-+ Shell#install(filename_from, filename_to, mode)
+      Same as:
+        File#foreach (when path is a file)
+        Dir#foreach (when path is a directory)
 
-These have a same function as a class method which is in FileTools
-with same name.
+--- Shell#open(path, mode)
 
-And also, alias:
+      Same as:
+        File#open (when path is a file)
+        Dir#open (when path is a directory)
 
-+ Shell#cmp	<- Shell#compare
-+ Shell#mv	<- Shell#move
-+ Shell#cp	<- Shell#copy
-+ Shell#rm_f	<- Shell#safe_unlink
-+ Shell#mkpath	<- Shell#makedirs
+--- Shell#unlink(path)
 
-* Samples
-** ex1
+      Same as:
+        Dir#open (when path is a file)
+        Dir#unlink (when path is a directory)
+
+--- Shell#test(command, file1, file2)
+--- Shell#[command, file1, file2]
+
+      Same as test().
+      ex)
+          sh[?e, "foo"]
+          sh[:e, "foo"]
+          sh["e", "foo"]
+          sh[:exists?, "foo"]
+          sh["exists?", "foo"]
+
+--- Shell#mkdir(*path)
+
+      Same as Dir.mkdir (with multiple directories allowed)
+
+--- Shell#rmdir(*path)
+
+      Same as Dir.rmdir (with multiple directories allowed)
+
+== Command execution
+
+--- System#system(command, *opts)
+
+      Executes  with .
+
+      ex)
+        print sh.system("ls", "-l")
+        sh.system("ls", "-l") | sh.head > STDOUT
+
+--- System#rehash
+
+      Does rehash.
+
+--- Shell#transact &block
+
+      Executes a block as self.
+      ex)
+        sh.transact{system("ls", "-l") | head > STDOUT}
+
+--- Shell#out(dev = STDOUT, &block)
+
+      Does transact, with redirecting the result output to .
+
+== Internal commands
+
+--- Shell#echo(*strings)
+--- Shell#cat(*files)
+--- Shell#glob(patten)
+--- Shell#tee(file)
+
+      Return Filter objects, which are results of their execution.
+
+--- Filter#each &block
+
+      Iterates a block for each line of it.
+
+--- Filter#<(src)
+
+      Inputs from , which is either a string of a file name or an
+      IO.
+
+--- Filter#>(to)
+
+      Outputs to , which is either a string of a file name or an
+      IO.
+
+--- Filter#>>(to)
+
+      Appends the ouput to , which is either a string of a file
+      name or an IO.
+
+--- Filter#|(filter)
+
+      Processes a pipeline.
+
+--- Filter#+(filter)
+
+      (filter1 + filter2) outputs filter1, and then outputs filter2.
+
+--- Filter#to_a
+--- Filter#to_s
+
+== Built-in commands
+
+--- Shell#atime(file)
+--- Shell#basename(file, *opt)
+--- Shell#chmod(mode, *files)
+--- Shell#chown(owner, group, *file)
+--- Shell#ctime(file)
+--- Shell#delete(*file)
+--- Shell#dirname(file)
+--- Shell#ftype(file)
+--- Shell#join(*file)
+--- Shell#link(file_from, file_to)
+--- Shell#lstat(file)
+--- Shell#mtime(file)
+--- Shell#readlink(file)
+--- Shell#rename(file_from, file_to)
+--- Shell#split(file)
+--- Shell#stat(file)
+--- Shell#symlink(file_from, file_to)
+--- Shell#truncate(file, length)
+--- Shell#utime(atime, mtime, *file)
+
+      Equivalent to the class methods of File with the same names.
+
+--- Shell#blockdev?(file)
+--- Shell#chardev?(file)
+--- Shell#directory?(file)
+--- Shell#executable?(file)
+--- Shell#executable_real?(file)
+--- Shell#exist?(file)/Shell#exists?(file)
+--- Shell#file?(file)
+--- Shell#grpowned?(file)
+--- Shell#owned?(file)
+--- Shell#pipe?(file)
+--- Shell#readable?(file)
+--- Shell#readable_real?(file)
+--- Shell#setgid?(file)
+--- Shell#setuid?(file)
+--- Shell#size(file)/Shell#size?(file)
+--- Shell#socket?(file)
+--- Shell#sticky?(file)
+--- Shell#symlink?(file)
+--- Shell#writable?(file)
+--- Shell#writable_real?(file)
+--- Shell#zero?(file)
+
+      Equivalent to the class methods of FileTest with the same names.
+
+--- Shell#syscopy(filename_from, filename_to)
+--- Shell#copy(filename_from, filename_to)
+--- Shell#move(filename_from, filename_to)
+--- Shell#compare(filename_from, filename_to)
+--- Shell#safe_unlink(*filenames)
+--- Shell#makedirs(*filenames)
+--- Shell#install(filename_from, filename_to, mode)
+
+      Equivalent to the class methods of FileTools with the same
+      names.
+
+      And also, there are some aliases for convenience:
+
+--- Shell#cmp	<- Shell#compare
+--- Shell#mv	<- Shell#move
+--- Shell#cp	<- Shell#copy
+--- Shell#rm_f	<- Shell#safe_unlink
+--- Shell#mkpath	<- Shell#makedirs
+
+= Samples
+
+== ex1
 
   sh = Shell.cd("/tmp")
   sh.mkdir "shell-test-1" unless sh.exists?("shell-test-1")
@@ -251,7 +315,7 @@ And also, alias:
     end
   end
 
-** ex2
+== ex2
 
   sh = Shell.cd("/tmp")
   sh.transact do
@@ -270,14 +334,15 @@ And also, alias:
     end
   end
 
-** ex3
+== ex3
 
   sh.cat("/etc/printcap") | sh.tee("tee1") > "tee2"
   (sh.cat < "/etc/printcap") | sh.tee("tee11") > "tee12"
   sh.cat("/etc/printcap") | sh.tee("tee1") >> "tee2"
   (sh.cat < "/etc/printcap") | sh.tee("tee11") >> "tee12"
 
-** ex5
+== ex4
 
   print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}
 
+=end
diff --git a/doc/shell.rd.jp b/doc/shell.rd.jp
index 0e8c2ee69b..073e71ea42 100644
--- a/doc/shell.rd.jp
+++ b/doc/shell.rd.jp
@@ -1,240 +1,292 @@
-shell.rbユーザガイド
+ -- shell.rb
 				$Release Version: 0.6.0 $
 			   	$Revision$
 			   	$Date$
 			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 
-ruby上でshellっぽいコマンドを使えるようにする.
+=begin
 
-* 目的
+= 目的
 
-sh/cshのようにコマンドの実行及びフィルタリングを気軽に行いたい.  ただし,
-sh/cshには制御文があるがそれはrubyの機能をそのまま用いる.
+ruby上でsh/cshのようにコマンドの実行及びフィルタリングを手軽に行う.
+sh/cshの制御文はrubyの機能を用いて実現する.
 
-* 主なクラス一覧
-** Shell
+= 主なクラス一覧
+
+== Shell
 
 Shellオブジェクトはカレントディレクトリを持ち, コマンド実行はそこからの
 相対パスになります.
 
-+ Shell#cwd/dir/getwd/pwd カレントディレクトリ
-+ Shell#system_path	  コマンドのパス
-+ Shell#umask		  umask
+--- Shell#cwd
+--- Shell#dir
+--- Shell#getwd
+--- Shell#pwd
 
-** Filter
-コマンドの実行結果はFilterとしてかえります. Enumerableをincludeしていま
-す.
+      カレントディレクトリを返す。
 
-* 主なメソッド一覧
-** コマンド定義
+--- Shell#system_path
 
-OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します. 
-注) コマンドを定義しなくともすむShell#systemコマンドもあります.
+      コマンドサーチパスの配列を返す。
 
-+ Shell.def_system_command(command, path = command)
-Shellのメソッドとしてcommandを登録します. 
+--- Shell#umask
 
-++ Shell.def_system_command "ls"
-   ls を定義
-++ Shell.def_system_command "sys_sort", "sort"
-   sortコマンドをsys_sortとして定義
+      umaskを返す。
 
-+ Shell.undef_system_command(command)
-commandを削除します.
+== Filter
 
-+ Shell.alias_command(ali, command, *opts) {...}
-commandのaliasをします. 
-例)
-  Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars"
-  Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}
+コマンドの実行結果はすべてFilterとしてかえります. Enumerableをincludeし
+ています.
 
-+ Shell.unalias_command(ali)
-commandのaliasを削除します.
+= 主なメソッド一覧
 
-+ Shell.install_system_commands(pre = "sys_")
-system_path上にある全ての実行可能ファイルをShellに定義する. メソッド名は
-元のファイル名の頭にpreをつけたものとなる.
+== コマンド定義
 
-** 生成
+OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します.
 
-+ Shell.new
-プロセスのカレントディレクトリをカレントディレクトリとするShellオブジェ
-クトを生成します.
+注) コマンドを定義しなくとも直接実行できるShell#systemコマンドもあります.
 
-+ Shell.cd(path)
-pathをカレントディレクトリとするShellオブジェクトを生成します.
+--- Shell.def_system_command(command, path = command)
 
-** プロセス管理
+      Shellのメソッドとしてcommandを登録します. 
 
-+ jobs
-スケジューリングされているjobの一覧を返す.
+      例)
+      Shell.def_system_command "ls"
+        ls を定義
 
-+ kill sig, job
-jobをkillする
+      Shell.def_system_command "sys_sort", "sort"
+        sortコマンドをsys_sortとして定義
 
-** カレントディレクトリ操作
+--- Shell.undef_system_command(command)
 
-+ Shell#cd(path, &block)/chdir
-カレントディレクトリをpathにする. イテレータとして呼ばれたときには, ブロッ
-ク実行中のみカレントディレクトリを変更する.
+      commandを削除します.
 
-+ Shell#pushd(path = nil, &block)/pushdir
+--- Shell.alias_command(ali, command, *opts) {...}
 
-カレントディレクトリをディレクトリスタックにつみ, カレントディレクトリを
-pathにする. pathが省略されたときには, カレントディレクトリとディレクトリ
-スタックのトップを交換する. イテレータとして呼ばれたときには, ブロック実
-行中のみpushdする.
+      commandのaliasをします. 
 
-+ Shell#popd/popdir
-ディレクトリスタックからポップし, それをカレントディレクトリにする.
+      例)
+        Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars"
+        Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}
 
-** ファイル/ディレクトリ操作
+--- Shell.unalias_command(ali)
 
-+ Shell#foreach(path = nil, &block)
-pathがファイルなら, File#foreach
-pathがディレクトリなら, Dir#foreach
+      commandのaliasを削除します.
 
-+ Shell#open(path, mode)
-pathがファイルなら, File#open
-pathがディレクトリなら, Dir#open
+--- Shell.install_system_commands(pre = "sys_")
 
-+ Shell#unlink(path)
-pathがファイルなら, File#unlink
-pathがディレクトリなら, Dir#unlink
+      system_path上にある全ての実行可能ファイルをShellに定義する. メソッ
+      ド名は元のファイル名の頭にpreをつけたものとなる.
 
-+ Shell#test(command, file1, file2)/Shell#[command, file1, file]
-ファイルテスト関数testと同じ. 
-例)
-    sh[?e, "foo"]
-    sh[:e, "foo"]
-    sh["e", "foo"]
-    sh[:exists?, "foo"]
-    sh["exists?", "foo"]
+== 生成
 
-+ Shell#mkdir(*path)
-Dir.mkdirと同じ(複数可)
+--- Shell.new
 
-+ Shell#rmdir(*path)
-Dir.rmdirと同じ(複数可)
+      プロセスのカレントディレクトリをカレントディレクトリとするShellオ
+      ブジェクトを生成します.
 
-** コマンド実行
-+ System#system(command, *opts)
-commandを実行する.
-例)
-  print sh.system("ls", "-l")
-  sh.system("ls", "-l") | sh.head > STDOUT
+--- Shell.cd(path)
 
-+ System#rehash
-リハッシュする
+      pathをカレントディレクトリとするShellオブジェクトを生成します.
 
-+ Shell#transact &block
-ブロック中ではshellをselfとして実行する.
-例)
-  sh.transact{system("ls", "-l") | head > STDOUT}
+== プロセス管理
 
-+ Shell#out(dev = STDOUT, &block)
-transactを呼び出しその結果をdevに出力する.
+--- Shell#jobs
 
-** 内部コマンド
-+ Shell#echo(*strings)
-+ Shell#cat(*files)
-+ Shell#glob(patten)
-+ Shell#tee(file)
+      スケジューリングされているjobの一覧を返す.
 
-これらは実行すると, それらを内容とするFilterオブジェクトを返します. 
+--- Shell#kill sig, job
 
-+ Filter#each &block
-フィルタの一行ずつをblockに渡す.
+      jobにシグナルsigを送る
 
-+ Filter#<(src)
-srcをフィルタの入力とする. srcが, 文字列ならばファイルを, IOであればそれ
-をそのまま入力とする.
+== カレントディレクトリ操作
 
-+ Filter#>(to)
-srcをフィルタの出力とする. toが, 文字列ならばファイルに, IOであればそれ
-をそのまま出力とする.
+--- Shell#cd(path, &block)
+--- Shell#chdir
 
-+ Filter#>>(to)
-srcをフィルタに追加する. toが, 文字列ならばファイルに, IOであればそれを
-そのまま出力とする.
+      カレントディレクトリをpathにする. イテレータとして呼ばれたときには
+      ブロック実行中のみカレントディレクトリを変更する.
 
-+ Filter#|(filter)
-パイプ結合
+--- Shell#pushd(path = nil, &block)
+--- Shell#pushdir
 
-+ Filter#+(filter)
-filter1 + filter2 は filter1の出力の後, filter2の出力を行う.
+      カレントディレクトリをディレクトリスタックにつみ, カレントディレク
+      トリをpathにする. pathが省略されたときには, カレントディレクトリと
+      ディレクトリスタックのトップを交換する. イテレータとして呼ばれたと
+      きには, ブロック実行中のみpushdする.
 
-+ Filter#to_a
-+ Filter#to_s
+--- Shell#popd
+--- Shell#popdir
 
-** 組込みコマンド
+      ディレクトリスタックからポップし, それをカレントディレクトリにする.
 
-+ Shell#atime(file)
-+ Shell#basename(file, *opt)
-+ Shell#chmod(mode, *files)
-+ Shell#chown(owner, group, *file)
-+ Shell#ctime(file)
-+ Shell#delete(*file)
-+ Shell#dirname(file)
-+ Shell#ftype(file)
-+ Shell#join(*file)
-+ Shell#link(file_from, file_to)
-+ Shell#lstat(file)
-+ Shell#mtime(file)
-+ Shell#readlink(file)
-+ Shell#rename(file_from, file_to)
-+ Shell#split(file)
-+ Shell#stat(file)
-+ Shell#symlink(file_from, file_to)
-+ Shell#truncate(file, length)
-+ Shell#utime(atime, mtime, *file)
+== ファイル/ディレクトリ操作
 
-これらはFileクラスにある同名のクラスメソッドと同じです.
+--- Shell#foreach(path = nil, &block)
 
-+ Shell#blockdev?(file)
-+ Shell#chardev?(file)
-+ Shell#directory?(file)
-+ Shell#executable?(file)
-+ Shell#executable_real?(file)
-+ Shell#exist?(file)/Shell#exists?(file)
-+ Shell#file?(file)
-+ Shell#grpowned?(file)
-+ Shell#owned?(file)
-+ Shell#pipe?(file)
-+ Shell#readable?(file)
-+ Shell#readable_real?(file)
-+ Shell#setgid?(file)
-+ Shell#setuid?(file)
-+ Shell#size(file)/Shell#size?(file)
-+ Shell#socket?(file)
-+ Shell#sticky?(file)
-+ Shell#symlink?(file)
-+ Shell#writable?(file)
-+ Shell#writable_real?(file)
-+ Shell#zero?(file)
+      pathがファイルなら, File#foreach
+      pathがディレクトリなら, Dir#foreach
 
-これらはFileTestクラスにある同名のクラスメソッドと同じです.
+--- Shell#open(path, mode)
 
-+ Shell#syscopy(filename_from, filename_to)
-+ Shell#copy(filename_from, filename_to)
-+ Shell#move(filename_from, filename_to)
-+ Shell#compare(filename_from, filename_to)
-+ Shell#safe_unlink(*filenames)
-+ Shell#makedirs(*filenames)
-+ Shell#install(filename_from, filename_to, mode)
+      pathがファイルなら, File#open
+      pathがディレクトリなら, Dir#open
 
-これらはFileToolsクラスにある同名のクラスメソッドと同じです.
+--- Shell#unlink(path)
 
-その他, 以下のものがエイリアスされています.
+      pathがファイルなら, File#unlink
+      pathがディレクトリなら, Dir#unlink
 
-+ Shell#cmp	<- Shell#compare
-+ Shell#mv	<- Shell#move
-+ Shell#cp	<- Shell#copy
-+ Shell#rm_f	<- Shell#safe_unlink
-+ Shell#mkpath	<- Shell#makedirs
+--- Shell#test(command, file1, file2)
+--- Shell#[command, file1, file2]
 
-* サンプル
-** ex1
+      ファイルテスト関数testと同じ. 
+      例)
+          sh[?e, "foo"]
+          sh[:e, "foo"]
+          sh["e", "foo"]
+          sh[:exists?, "foo"]
+          sh["exists?", "foo"]
+
+--- Shell#mkdir(*path)
+
+      Dir.mkdirと同じ(複数可)
+
+--- Shell#rmdir(*path)
+
+      Dir.rmdirと同じ(複数可)
+
+== コマンド実行
+
+--- System#system(command, *opts)
+
+      commandを実行する.
+      例)
+        print sh.system("ls", "-l")
+        sh.system("ls", "-l") | sh.head > STDOUT
+
+--- System#rehash
+
+      リハッシュする
+
+--- Shell#transact &block
+
+      ブロック中ではshellをselfとして実行する.
+      例)
+        sh.transact{system("ls", "-l") | head > STDOUT}
+
+--- Shell#out(dev = STDOUT, &block)
+
+      transactを呼び出しその結果をdevに出力する.
+
+== 内部コマンド
+
+--- Shell#echo(*strings)
+--- Shell#cat(*files)
+--- Shell#glob(patten)
+--- Shell#tee(file)
+
+      これらは実行すると, それらを内容とするFilterオブジェクトを返します. 
+
+--- Filter#each &block
+
+      フィルタの一行ずつをblockに渡す.
+
+--- Filter#<(src)
+
+      srcをフィルタの入力とする. srcが, 文字列ならばファイルを, IOであれ
+      ばそれをそのまま入力とする.
+
+--- Filter#>(to)
+
+      srcをフィルタの出力とする. toが, 文字列ならばファイルに, IOであれ
+      ばそれをそのまま出力とする.
+
+--- Filter#>>(to)
+
+      srcをフィルタに追加する. toが, 文字列ならばファイルに, IOであれば
+      それをそのまま出力とする.
+
+--- Filter#|(filter)
+
+      パイプ結合
+
+--- Filter#+(filter)
+
+      filter1 + filter2 は filter1の出力の後, filter2の出力を行う.
+
+--- Filter#to_a
+--- Filter#to_s
+
+== 組込みコマンド
+
+--- Shell#atime(file)
+--- Shell#basename(file, *opt)
+--- Shell#chmod(mode, *files)
+--- Shell#chown(owner, group, *file)
+--- Shell#ctime(file)
+--- Shell#delete(*file)
+--- Shell#dirname(file)
+--- Shell#ftype(file)
+--- Shell#join(*file)
+--- Shell#link(file_from, file_to)
+--- Shell#lstat(file)
+--- Shell#mtime(file)
+--- Shell#readlink(file)
+--- Shell#rename(file_from, file_to)
+--- Shell#split(file)
+--- Shell#stat(file)
+--- Shell#symlink(file_from, file_to)
+--- Shell#truncate(file, length)
+--- Shell#utime(atime, mtime, *file)
+
+      これらはFileクラスにある同名のクラスメソッドと同じです.
+
+--- Shell#blockdev?(file)
+--- Shell#chardev?(file)
+--- Shell#directory?(file)
+--- Shell#executable?(file)
+--- Shell#executable_real?(file)
+--- Shell#exist?(file)/Shell#exists?(file)
+--- Shell#file?(file)
+--- Shell#grpowned?(file)
+--- Shell#owned?(file)
+--- Shell#pipe?(file)
+--- Shell#readable?(file)
+--- Shell#readable_real?(file)
+--- Shell#setgid?(file)
+--- Shell#setuid?(file)
+--- Shell#size(file)/Shell#size?(file)
+--- Shell#socket?(file)
+--- Shell#sticky?(file)
+--- Shell#symlink?(file)
+--- Shell#writable?(file)
+--- Shell#writable_real?(file)
+--- Shell#zero?(file)
+
+      これらはFileTestクラスにある同名のクラスメソッドと同じです.
+
+--- Shell#syscopy(filename_from, filename_to)
+--- Shell#copy(filename_from, filename_to)
+--- Shell#move(filename_from, filename_to)
+--- Shell#compare(filename_from, filename_to)
+--- Shell#safe_unlink(*filenames)
+--- Shell#makedirs(*filenames)
+--- Shell#install(filename_from, filename_to, mode)
+
+      これらはFileToolsクラスにある同名のクラスメソッドと同じです.
+
+      その他, 以下のものがエイリアスされています.
+
+--- Shell#cmp	<- Shell#compare
+--- Shell#mv	<- Shell#move
+--- Shell#cp	<- Shell#copy
+--- Shell#rm_f	<- Shell#safe_unlink
+--- Shell#mkpath	<- Shell#makedirs
+
+= サンプル
+
+== ex1
 
   sh = Shell.cd("/tmp")
   sh.mkdir "shell-test-1" unless sh.exists?("shell-test-1")
@@ -251,7 +303,7 @@ filter1 + filter2 
     end
   end
 
-** ex2
+== ex2
 
   sh = Shell.cd("/tmp")
   sh.transact do
@@ -270,14 +322,15 @@ filter1 + filter2 
     end
   end
 
-** ex3
+== ex3
 
   sh.cat("/etc/printcap") | sh.tee("tee1") > "tee2"
   (sh.cat < "/etc/printcap") | sh.tee("tee11") > "tee12"
   sh.cat("/etc/printcap") | sh.tee("tee1") >> "tee2"
   (sh.cat < "/etc/printcap") | sh.tee("tee11") >> "tee12"
 
-** ex5
+== ex4
 
   print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}
 
+=end