diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | doc/shell.rd | 477 | ||||
-rw-r--r-- | doc/shell.rd.jp | 461 |
3 files changed, 535 insertions, 410 deletions
@@ -1,3 +1,10 @@ +Thu May 17 19:07:14 2001 Akinori MUSHA <knu@iDaemons.org> + + * 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 <matz@ruby-lang.org> * eval.c (rb_call0): address of local_vars might change during eval. diff --git a/doc/shell.rd b/doc/shell.rd index 437f035de..02ee1b020 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 <path>. +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 <job>. + Defines a command. Registers <path> as a Shell method + <command>. -** Current directory operation + ex) + Shell.def_system_command "ls" + Defines ls. -+ 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.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 <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. + 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#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 +--- 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 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 0e8c2ee69..073e71ea4 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 + + カレントディレクトリを返す。 + +--- 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オブジェクトを返します. -** Filter -コマンドの実行結果はFilterとしてかえります. Enumerableをincludeしていま -す. +--- Filter#each &block -* 主なメソッド一覧 -** コマンド定義 + フィルタの一行ずつをblockに渡す. -OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します. -注) コマンドを定義しなくともすむShell#systemコマンドもあります. +--- Filter#<(src) -+ Shell.def_system_command(command, path = command) -Shellのメソッドとしてcommandを登録します. + srcをフィルタの入力とする. srcが, 文字列ならばファイルを, IOであれ + ばそれをそのまま入力とする. -++ Shell.def_system_command "ls" - ls を定義 -++ Shell.def_system_command "sys_sort", "sort" - sortコマンドをsys_sortとして定義 +--- Filter#>(to) -+ Shell.undef_system_command(command) -commandを削除します. + srcをフィルタの出力とする. toが, 文字列ならばファイルに, IOであれ + ばそれをそのまま出力とする. -+ 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#>>(to) -+ Shell.unalias_command(ali) -commandのaliasを削除します. + srcをフィルタに追加する. toが, 文字列ならばファイルに, IOであれば + それをそのまま出力とする. -+ Shell.install_system_commands(pre = "sys_") -system_path上にある全ての実行可能ファイルをShellに定義する. メソッド名は -元のファイル名の頭にpreをつけたものとなる. +--- Filter#|(filter) -** 生成 + パイプ結合 -+ Shell.new -プロセスのカレントディレクトリをカレントディレクトリとするShellオブジェ -クトを生成します. +--- Filter#+(filter) -+ Shell.cd(path) -pathをカレントディレクトリとするShellオブジェクトを生成します. + filter1 + filter2 は filter1の出力の後, filter2の出力を行う. -** プロセス管理 +--- Filter#to_a +--- Filter#to_s -+ jobs -スケジューリングされているjobの一覧を返す. +== 組込みコマンド -+ kill sig, job -jobをkillする +--- 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#cd(path, &block)/chdir -カレントディレクトリをpathにする. イテレータとして呼ばれたときには, ブロッ -ク実行中のみカレントディレクトリを変更する. +--- 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#pushd(path = nil, &block)/pushdir + これらはFileTestクラスにある同名のクラスメソッドと同じです. -カレントディレクトリをディレクトリスタックにつみ, カレントディレクトリを -pathにする. pathが省略されたときには, カレントディレクトリとディレクトリ -スタックのトップを交換する. イテレータとして呼ばれたときには, ブロック実 -行中のみpushdする. +--- 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) -+ Shell#popd/popdir -ディレクトリスタックからポップし, それをカレントディレクトリにする. + これらはFileToolsクラスにある同名のクラスメソッドと同じです. -** ファイル/ディレクトリ操作 + その他, 以下のものがエイリアスされています. -+ Shell#foreach(path = nil, &block) -pathがファイルなら, File#foreach -pathがディレクトリなら, Dir#foreach +--- Shell#cmp <- Shell#compare +--- Shell#mv <- Shell#move +--- Shell#cp <- Shell#copy +--- Shell#rm_f <- Shell#safe_unlink +--- Shell#mkpath <- Shell#makedirs -+ 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, 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 +== ex1 sh = Shell.cd("/tmp") sh.mkdir "shell-test-1" unless sh.exists?("shell-test-1") @@ -251,7 +303,7 @@ filter1 + filter2 は filter1の出力の後, filter2の出力を行う. end end -** ex2 +== ex2 sh = Shell.cd("/tmp") sh.transact do @@ -270,14 +322,15 @@ filter1 + filter2 は 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 |