1 | #
|
---|
2 | # shell/builtin-command.rb -
|
---|
3 | # $Release Version: 0.6.0 $
|
---|
4 | # $Revision: 11708 $
|
---|
5 | # $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
|
---|
6 | # by Keiju ISHITSUKA(Nihon Rational Software Co.,Ltd)
|
---|
7 | #
|
---|
8 | # --
|
---|
9 | #
|
---|
10 | #
|
---|
11 | #
|
---|
12 |
|
---|
13 | require "shell/filter"
|
---|
14 |
|
---|
15 | class Shell
|
---|
16 | class BuiltInCommand<Filter
|
---|
17 | def wait?
|
---|
18 | false
|
---|
19 | end
|
---|
20 | def active?
|
---|
21 | true
|
---|
22 | end
|
---|
23 | end
|
---|
24 |
|
---|
25 | class Echo < BuiltInCommand
|
---|
26 | def initialize(sh, *strings)
|
---|
27 | super sh
|
---|
28 | @strings = strings
|
---|
29 | end
|
---|
30 |
|
---|
31 | def each(rs = nil)
|
---|
32 | rs = @shell.record_separator unless rs
|
---|
33 | for str in @strings
|
---|
34 | yield str + rs
|
---|
35 | end
|
---|
36 | end
|
---|
37 | end
|
---|
38 |
|
---|
39 | class Cat < BuiltInCommand
|
---|
40 | def initialize(sh, *filenames)
|
---|
41 | super sh
|
---|
42 | @cat_files = filenames
|
---|
43 | end
|
---|
44 |
|
---|
45 | def each(rs = nil)
|
---|
46 | if @cat_files.empty?
|
---|
47 | super
|
---|
48 | else
|
---|
49 | for src in @cat_files
|
---|
50 | @shell.foreach(src, rs){|l| yield l}
|
---|
51 | end
|
---|
52 | end
|
---|
53 | end
|
---|
54 | end
|
---|
55 |
|
---|
56 | class Glob < BuiltInCommand
|
---|
57 | def initialize(sh, pattern)
|
---|
58 | super sh
|
---|
59 |
|
---|
60 | @pattern = pattern
|
---|
61 | Thread.critical = true
|
---|
62 | back = Dir.pwd
|
---|
63 | begin
|
---|
64 | Dir.chdir @shell.cwd
|
---|
65 | @files = Dir[pattern]
|
---|
66 | ensure
|
---|
67 | Dir.chdir back
|
---|
68 | Thread.critical = false
|
---|
69 | end
|
---|
70 | end
|
---|
71 |
|
---|
72 | def each(rs = nil)
|
---|
73 | rs = @shell.record_separator unless rs
|
---|
74 | for f in @files
|
---|
75 | yield f+rs
|
---|
76 | end
|
---|
77 | end
|
---|
78 | end
|
---|
79 |
|
---|
80 | # class Sort < Cat
|
---|
81 | # def initialize(sh, *filenames)
|
---|
82 | # super
|
---|
83 | # end
|
---|
84 | #
|
---|
85 | # def each(rs = nil)
|
---|
86 | # ary = []
|
---|
87 | # super{|l| ary.push l}
|
---|
88 | # for l in ary.sort!
|
---|
89 | # yield l
|
---|
90 | # end
|
---|
91 | # end
|
---|
92 | # end
|
---|
93 |
|
---|
94 | class AppendIO < BuiltInCommand
|
---|
95 | def initialize(sh, io, filter)
|
---|
96 | super sh
|
---|
97 | @input = filter
|
---|
98 | @io = io
|
---|
99 | end
|
---|
100 |
|
---|
101 | def input=(filter)
|
---|
102 | @input.input=filter
|
---|
103 | for l in @input
|
---|
104 | @io << l
|
---|
105 | end
|
---|
106 | end
|
---|
107 |
|
---|
108 | end
|
---|
109 |
|
---|
110 | class AppendFile < AppendIO
|
---|
111 | def initialize(sh, to_filename, filter)
|
---|
112 | @file_name = to_filename
|
---|
113 | io = sh.open(to_filename, "a")
|
---|
114 | super(sh, io, filter)
|
---|
115 | end
|
---|
116 |
|
---|
117 | def input=(filter)
|
---|
118 | begin
|
---|
119 | super
|
---|
120 | ensure
|
---|
121 | @io.close
|
---|
122 | end
|
---|
123 | end
|
---|
124 | end
|
---|
125 |
|
---|
126 | class Tee < BuiltInCommand
|
---|
127 | def initialize(sh, filename)
|
---|
128 | super sh
|
---|
129 | @to_filename = filename
|
---|
130 | end
|
---|
131 |
|
---|
132 | def each(rs = nil)
|
---|
133 | to = @shell.open(@to_filename, "w")
|
---|
134 | begin
|
---|
135 | super{|l| to << l; yield l}
|
---|
136 | ensure
|
---|
137 | to.close
|
---|
138 | end
|
---|
139 | end
|
---|
140 | end
|
---|
141 |
|
---|
142 | class Concat < BuiltInCommand
|
---|
143 | def initialize(sh, *jobs)
|
---|
144 | super(sh)
|
---|
145 | @jobs = jobs
|
---|
146 | end
|
---|
147 |
|
---|
148 | def each(rs = nil)
|
---|
149 | while job = @jobs.shift
|
---|
150 | job.each{|l| yield l}
|
---|
151 | end
|
---|
152 | end
|
---|
153 | end
|
---|
154 | end
|
---|