Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Object
shell/filter.rb -
$Release Version: 0.7 $
$Revision: 31641 $
by Keiju ISHITSUKA(keiju@ruby-lang.org)
–
version.rb - shell version definition file
$Release Version: 0.7$
$Revision: 31641 $
by Keiju ISHITSUKA(keiju@ruby-lang.org)
–
# File shell.rb, line 244
def Shell.alias_command(ali, command, *opts, &block)
CommandProcessor.alias_command(ali, command, *opts, &block)
end
# File shell.rb, line 49
def debug=(val)
@debug = val
@verbose = val if val
end
command definitions
# File shell.rb, line 236
def Shell.def_system_command(command, path = command)
CommandProcessor.def_system_command(command, path)
end
# File shell.rb, line 70
def default_record_separator
if @default_record_separator
@default_record_separator
else
$/
end
end
# File shell.rb, line 78
def default_record_separator=(rs)
@default_record_separator = rs
end
# File shell.rb, line 58
def default_system_path
if @default_system_path
@default_system_path
else
ENV["PATH"].split(":")
end
end
# File shell.rb, line 66
def default_system_path=(path)
@default_system_path = path
end
# File shell.rb, line 252
def Shell.install_system_commands(pre = "sys_")
CommandProcessor.install_system_commands(pre)
end
# File shell.rb, line 90
def initialize(pwd = Dir.pwd, umask = nil)
@cwd = File.expand_path(pwd)
@dir_stack = []
@umask = umask
@system_path = Shell.default_system_path
@record_separator = Shell.default_record_separator
@command_processor = CommandProcessor.new(self)
@process_controller = ProcessController.new(self)
@verbose = Shell.verbose
@debug = Shell.debug
end
# File shell.rb, line 265
def self.notify(*opts, &block)
Shell::debug_output_synchronize do
if opts[-1].kind_of?(String)
yorn = verbose?
else
yorn = opts.pop
end
return unless yorn
if @debug_display_thread_id
if @debug_display_process_id
prefix = "shell(##{Process.pid}:#{Thread.current.to_s.sub("Thread", "Th")}): "
else
prefix = "shell(#{Thread.current.to_s.sub("Thread", "Th")}): "
end
else
prefix = "shell: "
end
_head = true
STDERR.print opts.collect{|mes|
mes = mes.dup
yield mes if iterator?
if _head
_head = false
# "shell" " + mes
prefix + mes
else
" "* prefix.size + mes
end
}.join("\n")+"\n"
end
end
If called as iterator, it restores the current directory when the block ends.
# File shell.rb, line 152
def chdir(path = nil, verbose = @verbose)
check_point
if iterator?
notify("chdir(with block) #{path}") if verbose
cwd_old = @cwd
begin
chdir(path, nil)
yield
ensure
chdir(cwd_old, nil)
end
else
notify("chdir #{path}") if verbose
path = "~" unless path
@cwd = expand_path(path)
notify "current dir: #{@cwd}"
rehash
Void.new(self)
end
end
# File shell.rb, line 115
def debug=(val)
@debug = val
@verbose = val if val
end
# File shell.rb, line 126
def expand_path(path)
File.expand_path(path, @cwd)
end
# File shell.rb, line 257
def inspect
if debug.kind_of?(Integer) && debug > 2
super
else
to_s
end
end
process management
# File shell.rb, line 225
def jobs
@process_controller.jobs
end
# File shell.rb, line 229
def kill(sig, command)
@process_controller.kill_job(sig, command)
end
# File shell.rb, line 207
def popdir
check_point
notify("popdir")
if pop = @dir_stack.pop
chdir pop
notify "dir stack: [#{@dir_stack.join ', '}]"
self
else
Shell.Fail DirStackEmpty
end
Void.new(self)
end
# File shell.rb, line 175
def pushdir(path = nil, verbose = @verbose)
check_point
if iterator?
notify("pushdir(with block) #{path}") if verbose
pushdir(path, nil)
begin
yield
ensure
popdir
end
elsif path
notify("pushdir #{path}") if verbose
@dir_stack.push @cwd
chdir(path, nil)
notify "dir stack: [#{@dir_stack.join ', '}]"
self
else
notify("pushdir") if verbose
if pop = @dir_stack.pop
@dir_stack.push @cwd
chdir pop
notify "dir stack: [#{@dir_stack.join ', '}]"
self
else
Shell.Fail DirStackEmpty
end
end
Void.new(self)
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.