2015-12-16 00:07:31 -05:00
|
|
|
# frozen_string_literal: false
|
2001-05-17 06:02:47 -04:00
|
|
|
#
|
2009-03-05 22:56:38 -05:00
|
|
|
# shell/builtin-command.rb -
|
2011-05-18 20:07:25 -04:00
|
|
|
# $Release Version: 0.7 $
|
|
|
|
# $Revision$
|
|
|
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
2001-05-17 06:02:47 -04:00
|
|
|
#
|
|
|
|
# --
|
|
|
|
#
|
2009-03-05 22:56:38 -05:00
|
|
|
#
|
2001-05-17 06:02:47 -04:00
|
|
|
#
|
|
|
|
|
2018-11-02 13:52:33 -04:00
|
|
|
require_relative "filter"
|
2001-05-17 06:02:47 -04:00
|
|
|
|
|
|
|
class Shell
|
2016-10-07 01:18:57 -04:00
|
|
|
class BuiltInCommand < Filter
|
2001-05-17 06:02:47 -04:00
|
|
|
def wait?
|
|
|
|
false
|
|
|
|
end
|
|
|
|
def active?
|
|
|
|
true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2007-03-20 08:38:58 -04:00
|
|
|
class Void < BuiltInCommand
|
|
|
|
def initialize(sh, *opts)
|
|
|
|
super sh
|
|
|
|
end
|
2009-03-05 22:56:38 -05:00
|
|
|
|
2007-03-20 08:38:58 -04:00
|
|
|
def each(rs = nil)
|
|
|
|
# do nothing
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2001-05-17 06:02:47 -04:00
|
|
|
class Echo < BuiltInCommand
|
|
|
|
def initialize(sh, *strings)
|
|
|
|
super sh
|
|
|
|
@strings = strings
|
|
|
|
end
|
2009-03-05 22:56:38 -05:00
|
|
|
|
2001-05-17 06:02:47 -04:00
|
|
|
def each(rs = nil)
|
|
|
|
rs = @shell.record_separator unless rs
|
|
|
|
for str in @strings
|
2011-05-18 17:19:18 -04:00
|
|
|
yield str + rs
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Cat < BuiltInCommand
|
|
|
|
def initialize(sh, *filenames)
|
|
|
|
super sh
|
|
|
|
@cat_files = filenames
|
|
|
|
end
|
|
|
|
|
|
|
|
def each(rs = nil)
|
|
|
|
if @cat_files.empty?
|
2011-05-18 17:19:18 -04:00
|
|
|
super
|
2001-05-17 06:02:47 -04:00
|
|
|
else
|
2011-05-18 17:19:18 -04:00
|
|
|
for src in @cat_files
|
|
|
|
@shell.foreach(src, rs){|l| yield l}
|
|
|
|
end
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Glob < BuiltInCommand
|
|
|
|
def initialize(sh, pattern)
|
|
|
|
super sh
|
|
|
|
|
|
|
|
@pattern = pattern
|
|
|
|
end
|
|
|
|
|
|
|
|
def each(rs = nil)
|
2009-03-05 22:56:38 -05:00
|
|
|
if @pattern[0] == ?/
|
2011-05-18 17:19:18 -04:00
|
|
|
@files = Dir[@pattern]
|
2007-03-20 08:38:58 -04:00
|
|
|
else
|
2011-05-18 17:19:18 -04:00
|
|
|
prefix = @shell.pwd+"/"
|
|
|
|
@files = Dir[prefix+@pattern].collect{|p| p.sub(prefix, "")}
|
2007-03-20 08:38:58 -04:00
|
|
|
end
|
2001-05-17 06:02:47 -04:00
|
|
|
rs = @shell.record_separator unless rs
|
2007-03-20 08:38:58 -04:00
|
|
|
for f in @files
|
2011-05-18 17:19:18 -04:00
|
|
|
yield f+rs
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class AppendIO < BuiltInCommand
|
|
|
|
def initialize(sh, io, filter)
|
|
|
|
super sh
|
|
|
|
@input = filter
|
|
|
|
@io = io
|
|
|
|
end
|
|
|
|
|
|
|
|
def input=(filter)
|
|
|
|
@input.input=filter
|
|
|
|
for l in @input
|
2011-05-18 17:19:18 -04:00
|
|
|
@io << l
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
class AppendFile < AppendIO
|
|
|
|
def initialize(sh, to_filename, filter)
|
|
|
|
@file_name = to_filename
|
|
|
|
io = sh.open(to_filename, "a")
|
|
|
|
super(sh, io, filter)
|
|
|
|
end
|
|
|
|
|
|
|
|
def input=(filter)
|
|
|
|
begin
|
2011-05-18 17:19:18 -04:00
|
|
|
super
|
2001-05-17 06:02:47 -04:00
|
|
|
ensure
|
2011-05-18 17:19:18 -04:00
|
|
|
@io.close
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Tee < BuiltInCommand
|
|
|
|
def initialize(sh, filename)
|
|
|
|
super sh
|
|
|
|
@to_filename = filename
|
|
|
|
end
|
|
|
|
|
|
|
|
def each(rs = nil)
|
|
|
|
to = @shell.open(@to_filename, "w")
|
|
|
|
begin
|
2011-05-18 17:19:18 -04:00
|
|
|
super{|l| to << l; yield l}
|
2001-05-17 06:02:47 -04:00
|
|
|
ensure
|
2011-05-18 17:19:18 -04:00
|
|
|
to.close
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Concat < BuiltInCommand
|
|
|
|
def initialize(sh, *jobs)
|
|
|
|
super(sh)
|
|
|
|
@jobs = jobs
|
|
|
|
end
|
|
|
|
|
|
|
|
def each(rs = nil)
|
|
|
|
while job = @jobs.shift
|
2011-05-18 17:19:18 -04:00
|
|
|
job.each{|l| yield l}
|
2001-05-17 06:02:47 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|