summaryrefslogtreecommitdiff
path: root/doc/shell.rd.jp
diff options
context:
space:
mode:
Diffstat (limited to 'doc/shell.rd.jp')
-rw-r--r--doc/shell.rd.jp283
1 files changed, 283 insertions, 0 deletions
diff --git a/doc/shell.rd.jp b/doc/shell.rd.jp
new file mode 100644
index 0000000000..0e8c2ee69b
--- /dev/null
+++ b/doc/shell.rd.jp
@@ -0,0 +1,283 @@
+shell.rbユーザガイド
+ $Release Version: 0.6.0 $
+ $Revision$
+ $Date$
+ by Keiju ISHITSUKA(keiju@ishitsuka.com)
+
+ruby上でshellっぽいコマンドを使えるようにする.
+
+* 目的
+
+sh/cshのようにコマンドの実行及びフィルタリングを気軽に行いたい. ただし,
+sh/cshには制御文があるがそれはrubyの機能をそのまま用いる.
+
+* 主なクラス一覧
+** Shell
+
+Shellオブジェクトはカレントディレクトリを持ち, コマンド実行はそこからの
+相対パスになります.
+
++ Shell#cwd/dir/getwd/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オブジェクトを生成します.
+
+** プロセス管理
+
++ jobs
+スケジューリングされているjobの一覧を返す.
+
++ kill sig, job
+jobをkillする
+
+** カレントディレクトリ操作
+
++ Shell#cd(path, &block)/chdir
+カレントディレクトリをpathにする. イテレータとして呼ばれたときには, ブロッ
+ク実行中のみカレントディレクトリを変更する.
+
++ Shell#pushd(path = nil, &block)/pushdir
+
+カレントディレクトリをディレクトリスタックにつみ, カレントディレクトリを
+pathにする. pathが省略されたときには, カレントディレクトリとディレクトリ
+スタックのトップを交換する. イテレータとして呼ばれたときには, ブロック実
+行中のみpushdする.
+
++ Shell#popd/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, 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")
+ sh.cd("shell-test-1")
+ for dir in ["dir1", "dir3", "dir5"]
+ if !sh.exists?(dir)
+ sh.mkdir dir
+ sh.cd(dir) do
+ f = sh.open("tmpFile", "w")
+ f.print "TEST\n"
+ f.close
+ end
+ print sh.pwd
+ end
+ end
+
+** ex2
+
+ sh = Shell.cd("/tmp")
+ sh.transact do
+ mkdir "shell-test-1" unless exists?("shell-test-1")
+ cd("shell-test-1")
+ for dir in ["dir1", "dir3", "dir5"]
+ if !exists?(dir)
+ mkdir dir
+ cd(dir) do
+ f = open("tmpFile", "w")
+ f.print "TEST\n"
+ f.close
+ end
+ print pwd
+ end
+ end
+ end
+
+** 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
+
+ print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}
+