Object
shell/filter.rb - $Release Version: 0.7 $ $Revision: 14912 $ by Keiju ISHITSUKA(keiju@ruby-lang.org)
–
version.rb - shell version definition file $Release Version: 0.7$ $Revision: 14912 $ 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