In order to execute a command on your OS, you need to define it as a Shell method.
Alternatively, you can execute any command via #system even if it is not defined.
- #
- A
- C
- D
- E
- F
- G
- I
- M
- N
- O
- R
- S
- T
- U
NoDelegateMethods | = | m.collect{|x| x.id2name} |
Creates a command alias at the given alias
for the given
command
, passing any options
along with it.
Shell::CommandProcessor.alias_command "lsC", "ls", "-CBF", "--show-control-chars"
Shell::CommandProcessor.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}
# File lib/shell/command-processor.rb, line 432 def self.alias_command(ali, command, *opts) ali = ali.id2name if ali.kind_of?(Symbol) command = command.id2name if command.kind_of?(Symbol) begin if iterator? @alias_map[ali.intern] = proc eval((d = %Q[def #{ali}(*opts) @shell.__send__(:#{command}, *(CommandProcessor.alias_map[:#{ali}].call *opts)) end]), nil, __FILE__, __LINE__ - 1) else args = opts.collect{|opt| '"' + opt + '"'}.join(",") eval((d = %Q[def #{ali}(*opts) @shell.__send__(:#{command}, #{args}, *opts) end]), nil, __FILE__, __LINE__ - 1) end rescue SyntaxError Shell.notify "warn: Can't alias #{ali} command: #{command}." Shell.notify("Definition of #{ali}: ", d) raise end Shell.notify "Define #{ali} command: #{command}.", Shell.debug? Shell.notify("Definition of #{ali}: ", d, Shell.debug.kind_of?(Integer) && Shell.debug > 1) self end
Returns a list of aliased commands
Defines a command, registering path
as a Shell method for the given command
.
Shell::CommandProcessor.def_system_command "ls"
#=> Defines ls.
Shell::CommandProcessor.def_system_command "sys_sort", "sort"
#=> Defines sys_sort as sort
# File lib/shell/command-processor.rb, line 393 def self.def_system_command(command, path = command) begin eval((d = %Q[def #{command}(*opts) SystemCommand.new(@shell, '#{path}', *opts) end]), nil, __FILE__, __LINE__ - 1) rescue SyntaxError Shell.notify "warn: Can't define #{command} path: #{path}." end Shell.notify "Define #{command} path: #{path}.", Shell.debug? Shell.notify("Definition of #{command}: ", d, Shell.debug.kind_of?(Integer) && Shell.debug > 1) end
# File lib/shell/command-processor.rb, line 39 def self.initialize install_builtin_commands # define CommandProcessor#methods to Shell#methods and Filter#methods for m in CommandProcessor.instance_methods(false) - NoDelegateMethods add_delegate_command_to_shell(m) end def self.method_added(id) add_delegate_command_to_shell(id) end end
include run file.
# File lib/shell/command-processor.rb, line 56 def self.run_config begin load File.expand_path("~/.rb_shell") if ENV.key?("HOME") rescue LoadError, Errno::ENOENT rescue print "load error: #{rc}\n" print $!.class, ": ", $!, "\n" for err in $@[0, $@.size - 2] print "\t", err, "\n" end end end
Unaliases the given alias
command.
Undefines a command
path: String
return: String
returns the absolute path for <path>
private functions
# File lib/shell/command-processor.rb, line 357 def find_system_command(command) return command if /^\// =~ command case path = @system_commands[command] when String if exists?(path) return path else Shell.Fail Error::CommandNotFound, command end when false Shell.Fail Error::CommandNotFound, command end for p in @shell.system_path path = join(p, command) if FileTest.exist?(path) @system_commands[command] = path return path end end @system_commands[command] = false Shell.Fail Error::CommandNotFound, command end
See IO.foreach when
path
is a file.
See Dir.foreach when
path
is a directory.
def sort(*filenames)
Sort.new(self, *filenames)
end
Returns a Glob filter object, with the given
pattern
object
Same as Dir.mkdir, except multiple directories are allowed.
# File lib/shell/command-processor.rb, line 199 def mkdir(*path) @shell.check_point notify("mkdir #{path.join(' ')}") perm = nil if path.last.kind_of?(Integer) perm = path.pop end for dir in path d = expand_path(dir) if perm Dir.mkdir(d, perm) else Dir.mkdir(d) end File.chmod(d, 0666 & ~@shell.umask) if @shell.umask end Void.new(@shell) end
%pwd, %cwd -> @pwd
# File lib/shell/command-processor.rb, line 111 def open(path, mode = nil, perm = 0666, &b) path = expand_path(path) if File.directory?(path) Dir.open(path, &b) else if @shell.umask f = File.open(path, mode, perm) File.chmod(perm & ~@shell.umask, path) if block_given? f.each(&b) end f else f = File.open(path, mode, perm, &b) end end end
Clears the command hash table.
Executes the given command
with the options
parameter.
Example:
print sh.system("ls", "-l")
sh.system("ls", "-l") | sh.head > STDOUT
# File lib/shell/command-processor.rb, line 242 def system(command, *opts) if opts.empty? if command =~ /\*|\?|\{|\}|\[|\]|<|>|\(|\)|~|&|\||\|\$|;|'|`|"|\n/ return SystemCommand.new(@shell, find_system_command("sh"), "-c", command) else command, *opts = command.split(/\s+/) end end SystemCommand.new(@shell, find_system_command(command), *opts) end
Tests if the given command
exists in file1
, or
optionally file2
.
Example:
sh[?e, "foo"]
sh[:e, "foo"]
sh["e", "foo"]
sh[:exists?, "foo"]
sh["exists?", "foo"]
# File lib/shell/command-processor.rb, line 164 def test(command, file1, file2=nil) file1 = expand_path(file1) file2 = expand_path(file2) if file2 command = command.id2name if command.kind_of?(Symbol) case command when Integer if file2 top_level_test(command, file1, file2) else top_level_test(command, file1) end when String if command.size == 1 if file2 top_level_test(command, file1, file2) else top_level_test(command, file1) end else if file2 FileTest.send(command, file1, file2) else FileTest.send(command, file1) end end end end
Executes a block as self
Example:
sh.transact { system("ls", "-l") | head > STDOUT }
See IO.unlink when path
is a file.
See Dir.unlink when
path
is a directory.