summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-17 10:35:32 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-17 10:35:32 +0000
commit0deafc16c4ed7f34f37a165eb242a64a6e755b59 (patch)
tree3cf57fb69299f107fe21da4325efe85173604d3e /doc
parentb119069bac8b255d5892ba76d34264d8b230d3d2 (diff)
* doc/shell.rd*, lib/shell*: bring shell.rb 0.6 onto the ruby_1_6
branch. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1426 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'doc')
-rw-r--r--doc/shell.rd477
-rw-r--r--doc/shell.rd.jp461
2 files changed, 410 insertions, 528 deletions
diff --git a/doc/shell.rd b/doc/shell.rd
index 02ee1b020a..437f035dec 100644
--- a/doc/shell.rd
+++ b/doc/shell.rd
@@ -1,304 +1,240 @@
- -- shell.rb
+shell.rbユーザガイド
$Release Version: 0.6.0 $
$Revision$
$Date$
by Keiju ISHITSUKA(keiju@ishitsuka.com)
-=begin
+* What's shell.rb?
-= What's shell.rb?
+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.
-It realizes a wish to do execution of commands with filters and pipes
-like sh/csh by using just native facilities of ruby.
+* Main classes
+** Shell
-= Main classes
+All shell objects have a each unique current directory. Any shell object
+execute a command on relative path from current directory.
-== Shell
++ Shell#cwd/dir/getwd/pwd current directory
++ Shell#system_path command path
++ Shell#umask umask
-Every shell object has its own current working directory, and executes
-each command as if it stands in the directory.
+** Filter
---- Shell#cwd
---- Shell#dir
---- Shell#getwd
---- Shell#pwd
+Any result of command exection is a Filter. Filter include Enumerable,
+therefore a Filter object can use all Enumerable facility.
- Returns the current directory
+* Main methods
+** Command definition
---- Shell#system_path
+For executing a command on OS, you need to define it as a Shell
+method.
- Returns the command search path in an array
+notice) Also, there are a Shell#system alternatively to execute the
+command even if it is not defined.
---- Shell#umask
++ Shell.def_system_command(command, path = command)
+Register command as a Shell method
- Returns the umask
+++ Shell.def_system_command "ls"
+ define ls
+++ Shell.def_system_command "sys_sort", "sort"
+ define sys_sort as sort
-== Filter
++ Shell.install_system_commands(pre = "sys_")
-Any result of command exection is a Filter. Filter include
-Enumerable, therefore a Filter object can use all Enumerable
-facilities.
+Define all command of default_system_path. Default action prefix
+"sys_" to the method name.
-= Main methods
+** 生成
-== Command definitions
++ Shell.new
+Shell creates a Shell object of which current directory is the process
+current directory.
-In order to execute a command on your OS, you need to define it as a
-Shell method.
++ Shell.cd(path)
+Shell creates a Shell object of which current directory is <path>.
-Alternatively, you can execute any command via Shell#system even if it
-is not defined.
+** Process management
---- Shell.def_system_command(command, path = command)
++ jobs
+The shell returns jobs list of scheduling.
- Defines a command. Registers <path> as a Shell method
- <command>.
++ kill sig, job
+The shell kill <job>.
- ex)
- Shell.def_system_command "ls"
- Defines ls.
+** Current directory operation
- Shell.def_system_command "sys_sort", "sort"
- Defines sys_sort as sort.
++ Shell#cd(path, &block)/chdir
+The current directory of the shell change to <path>. If it is called
+with an block, it changes current directory to the <path> while its
+block executes.
---- Shell.undef_system_command(command)
++ Shell#pushd(path = nil, &block)/pushdir
- Undefines a commmand
+The shell push current directory to directory stack. it changes
+current directory to <path>. 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 <path> while its block executes.
---- Shell.alias_command(ali, command, *opts) {...}
++ Shell#popd/popdir
+The shell pop a directory from directory stack, and its directory is
+changed to current directory.
- Aliases a command.
+** ファイル/ディレクトリ操作
- ex)
- Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars"
- Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}
++ Shell#foreach(path = nil, &block)
+Same as:
+ File#foreach (when path is a file)
+ Dir#foreach (when path is a directory)
---- Shell.unalias_command(ali)
++ Shell#open(path, mode)
+Same as:
+ File#open(when path is a file)
+ Dir#open(when path is a directory)
- Unaliases a command.
++ Shell#unlink(path)
+Same as:
+ Dir#open(when path is a file)
+ Dir#unlink(when path is a directory)
---- Shell.install_system_commands(pre = "sys_")
-
- Defines all commands in the default_system_path as Shell method,
- all with <pre> prefixed to their names.
-
-== Creation
-
---- Shell.new
-
- Creates a Shell object which current directory is set to the
- process current directory.
-
---- Shell.cd(path)
-
- Creates a Shell object which current directory is set to
- <path>.
-
-== Process management
-
---- Shell#jobs
-
- Returns a list of scheduled jobs.
-
---- Shell#kill sig, job
-
- Sends a signal <sig> to <job>.
-
-== Current directory operations
-
---- Shell#cd(path, &block)
---- Shell#chdir
-
- Changes the current directory to <path>. If a block is given,
- it restores the current directory when the block ends.
-
---- Shell#pushd(path = nil, &block)
---- Shell#pushdir
-
- Pushes the current directory to the directory stack, changing
- the current directory to <path>. If <path> 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#popd
---- Shell#popdir
-
- Pops a directory from the directory stack, and sets the current
- directory to it.
-
-== File and directory operations
-
---- Shell#foreach(path = nil, &block)
-
- Same as:
- File#foreach (when path is a file)
- Dir#foreach (when path is a directory)
-
---- Shell#open(path, mode)
-
- Same as:
- File#open (when path is a file)
- Dir#open (when path is a directory)
-
---- Shell#unlink(path)
-
- 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 <command> with <opts>.
-
- 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 <dev>.
-
-== 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 <src>, which is either a string of a file name or an
- IO.
-
---- Filter#>(to)
-
- Outputs to <to>, which is either a string of a file name or an
- IO.
-
---- Filter#>>(to)
-
- Appends the ouput to <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
++ 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#mkdir(*path)
+Same as Dir.mkdir(its parameters is one or more)
+
++ Shell#rmdir(*path)
+Same as Dir.rmdir(its parameters is one or more)
+
+** Command execution
++ System#system(command, *opts)
+The shell execure <command>.
+ex)
+ print sh.system("ls", "-l")
+ sh.system("ls", "-l") | sh.head > STDOUT
+
++ System#rehash
+The shell do rehash.
+
++ Shell#transact &block
+The shell execute block as self.
+ex)
+ sh.transact{system("ls", "-l") | head > STDOUT}
+
++ Shell#out(dev = STDOUT, &block)
+The shell do transact, and its result output to dev.
+
+** Internal Command
++ Shell#echo(*strings)
++ Shell#cat(*files)
++ Shell#glob(patten)
++ Shell#tee(file)
+
+When these are executed, they return a filter object, which is a
+result of their execution.
+
++ Filter#each &block
+The shell iterate with each line of it.
+
++ 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.
+
++ Filter#>(to)
+The shell outputs to <to>. If <to> is a string, it outputs to a file
+of which name is the string. If <to>c is a IO, it outoputs to its IO.
+
++ Filter#>>(to)
+The shell appends to <to>. If <to> is a string, it is append to a file
+of which name is the string. If <to>c is a IO, it is append to its IO.
+
++ Filter#|(filter)
+pipe combination
+
++ Filter#+(filter)
+filter1 + filter2 output filter1, and next output filter2.
+
++ Filter#to_a
++ Filter#to_s
+
+** Built-in command
+
++ 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)
+
+These have a same function as a class method which is in File with same name.
+
++ 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)
+
+These have a same function as a class method which is in FileTest with
+same name.
+
++ 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)
+
+These have a same function as a class method which is in FileTools
+with same name.
+
+And also, alias:
+
++ 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")
@@ -315,7 +251,7 @@ is not defined.
end
end
-== ex2
+** ex2
sh = Shell.cd("/tmp")
sh.transact do
@@ -334,15 +270,14 @@ is not defined.
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"
-== ex4
+** ex5
print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}
-=end
diff --git a/doc/shell.rd.jp b/doc/shell.rd.jp
index 073e71ea42..0e8c2ee69b 100644
--- a/doc/shell.rd.jp
+++ b/doc/shell.rd.jp
@@ -1,292 +1,240 @@
- -- shell.rb
+shell.rbユーザガイド
$Release Version: 0.6.0 $
$Revision$
$Date$
by Keiju ISHITSUKA(keiju@ishitsuka.com)
-=begin
+ruby上でshellっぽいコマンドを使えるようにする.
-= 目的
+* 目的
-ruby上でsh/cshのようにコマンドの実行及びフィルタリングを手軽に行う.
-sh/cshの制御文はrubyの機能を用いて実現する.
+sh/cshのようにコマンドの実行及びフィルタリングを気軽に行いたい. ただし,
+sh/cshには制御文があるがそれはrubyの機能をそのまま用いる.
-= 主なクラス一覧
-
-== Shell
+* 主なクラス一覧
+** Shell
Shellオブジェクトはカレントディレクトリを持ち, コマンド実行はそこからの
相対パスになります.
---- Shell#cwd
---- Shell#dir
---- Shell#getwd
---- Shell#pwd
-
- カレントディレクトリを返す。
-
---- Shell#system_path
-
- コマンドサーチパスの配列を返す。
-
---- Shell#umask
-
- umaskを返す。
-
-== Filter
-
-コマンドの実行結果はすべてFilterとしてかえります. Enumerableをincludeし
-ています.
-
-= 主なメソッド一覧
-
-== コマンド定義
-
-OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します.
-
-注) コマンドを定義しなくとも直接実行できるShell#systemコマンドもあります.
-
---- Shell.def_system_command(command, path = command)
-
- Shellのメソッドとしてcommandを登録します.
-
- 例)
- Shell.def_system_command "ls"
- ls を定義
-
- Shell.def_system_command "sys_sort", "sort"
- sortコマンドをsys_sortとして定義
-
---- Shell.undef_system_command(command)
-
- commandを削除します.
-
---- 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]}
-
---- Shell.unalias_command(ali)
-
- commandのaliasを削除します.
-
---- Shell.install_system_commands(pre = "sys_")
-
- system_path上にある全ての実行可能ファイルをShellに定義する. メソッ
- ド名は元のファイル名の頭にpreをつけたものとなる.
-
-== 生成
-
---- Shell.new
-
- プロセスのカレントディレクトリをカレントディレクトリとするShellオ
- ブジェクトを生成します.
-
---- Shell.cd(path)
-
- pathをカレントディレクトリとするShellオブジェクトを生成します.
-
-== プロセス管理
-
---- Shell#jobs
-
- スケジューリングされているjobの一覧を返す.
-
---- Shell#kill sig, job
-
- jobにシグナルsigを送る
-
-== カレントディレクトリ操作
-
---- Shell#cd(path, &block)
---- Shell#chdir
-
- カレントディレクトリをpathにする. イテレータとして呼ばれたときには
- ブロック実行中のみカレントディレクトリを変更する.
-
---- Shell#pushd(path = nil, &block)
---- Shell#pushdir
-
- カレントディレクトリをディレクトリスタックにつみ, カレントディレク
- トリをpathにする. pathが省略されたときには, カレントディレクトリと
- ディレクトリスタックのトップを交換する. イテレータとして呼ばれたと
- きには, ブロック実行中のみpushdする.
-
---- Shell#popd
---- Shell#popdir
-
- ディレクトリスタックからポップし, それをカレントディレクトリにする.
-
-== ファイル/ディレクトリ操作
-
---- Shell#foreach(path = nil, &block)
-
- pathがファイルなら, File#foreach
- pathがディレクトリなら, Dir#foreach
-
---- Shell#open(path, mode)
-
- pathがファイルなら, File#open
- pathがディレクトリなら, Dir#open
-
---- Shell#unlink(path)
-
- pathがファイルなら, File#unlink
- pathがディレクトリなら, Dir#unlink
-
---- Shell#test(command, file1, file2)
---- Shell#[command, file1, file2]
-
- ファイルテスト関数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オブジェクトを返します.
++ Shell#cwd/dir/getwd/pwd カレントディレクトリ
++ Shell#system_path コマンドのパス
++ Shell#umask umask
---- Filter#each &block
+** Filter
+コマンドの実行結果はFilterとしてかえります. Enumerableをincludeしていま
+す.
- フィルタの一行ずつをblockに渡す.
+* 主なメソッド一覧
+** コマンド定義
---- Filter#<(src)
+OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します.
+注) コマンドを定義しなくともすむShell#systemコマンドもあります.
- srcをフィルタの入力とする. srcが, 文字列ならばファイルを, IOであれ
- ばそれをそのまま入力とする.
++ Shell.def_system_command(command, path = command)
+Shellのメソッドとしてcommandを登録します.
---- Filter#>(to)
+++ Shell.def_system_command "ls"
+ ls を定義
+++ Shell.def_system_command "sys_sort", "sort"
+ sortコマンドをsys_sortとして定義
- srcをフィルタの出力とする. toが, 文字列ならばファイルに, IOであれ
- ばそれをそのまま出力とする.
++ Shell.undef_system_command(command)
+commandを削除します.
---- Filter#>>(to)
++ 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]}
- srcをフィルタに追加する. toが, 文字列ならばファイルに, IOであれば
- それをそのまま出力とする.
++ Shell.unalias_command(ali)
+commandのaliasを削除します.
---- Filter#|(filter)
++ Shell.install_system_commands(pre = "sys_")
+system_path上にある全ての実行可能ファイルをShellに定義する. メソッド名は
+元のファイル名の頭にpreをつけたものとなる.
- パイプ結合
+** 生成
---- Filter#+(filter)
++ Shell.new
+プロセスのカレントディレクトリをカレントディレクトリとするShellオブジェ
+クトを生成します.
- filter1 + filter2 は filter1の出力の後, filter2の出力を行う.
++ Shell.cd(path)
+pathをカレントディレクトリとするShellオブジェクトを生成します.
---- Filter#to_a
---- Filter#to_s
+** プロセス管理
-== 組込みコマンド
++ jobs
+スケジューリングされているjobの一覧を返す.
---- 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)
++ kill sig, job
+jobをkillする
- これらは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)
++ Shell#cd(path, &block)/chdir
+カレントディレクトリをpathにする. イテレータとして呼ばれたときには, ブロッ
+ク実行中のみカレントディレクトリを変更する.
- これらはFileTestクラスにある同名のクラスメソッドと同じです.
++ Shell#pushd(path = nil, &block)/pushdir
---- 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にする. pathが省略されたときには, カレントディレクトリとディレクトリ
+スタックのトップを交換する. イテレータとして呼ばれたときには, ブロック実
+行中のみpushdする.
- これらはFileToolsクラスにある同名のクラスメソッドと同じです.
++ Shell#popd/popdir
+ディレクトリスタックからポップし, それをカレントディレクトリにする.
- その他, 以下のものがエイリアスされています.
+** ファイル/ディレクトリ操作
---- Shell#cmp <- Shell#compare
---- Shell#mv <- Shell#move
---- Shell#cp <- Shell#copy
---- Shell#rm_f <- Shell#safe_unlink
---- Shell#mkpath <- Shell#makedirs
++ Shell#foreach(path = nil, &block)
+pathがファイルなら, File#foreach
+pathがディレクトリなら, Dir#foreach
-= サンプル
++ Shell#open(path, mode)
+pathがファイルなら, File#open
+pathがディレクトリなら, Dir#open
-== ex1
++ Shell#unlink(path)
+pathがファイルなら, File#unlink
+pathがディレクトリなら, Dir#unlink
+
++ 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#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")
@@ -303,7 +251,7 @@ OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します.
end
end
-== ex2
+** ex2
sh = Shell.cd("/tmp")
sh.transact do
@@ -322,15 +270,14 @@ OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します.
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"
-== ex4
+** ex5
print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}
-=end