diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-05-17 10:35:32 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-05-17 10:35:32 +0000 |
commit | 0deafc16c4ed7f34f37a165eb242a64a6e755b59 (patch) | |
tree | 3cf57fb69299f107fe21da4325efe85173604d3e /doc | |
parent | b119069bac8b255d5892ba76d34264d8b230d3d2 (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.rd | 477 | ||||
-rw-r--r-- | doc/shell.rd.jp | 461 |
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 |