Executing systems commands

=begin
Hey chaps.

I’m using an array to find the locations of various commands on a
system. Three versions of the same thing. Two work and one doesn’t. Any
one
know why?
=end

here’s an array of commands that we want to find

k = %w[ ruby xterm enlightenment emacs]

#why does this work?
k.each do |x|
p system(“which #{x}”)
end

and this work

k.each do |x|
p system(“whereis #{x}”)
end

but this doesn’t

k.each do |x|
p system(“type -p #{x}”)
end

END
Regards,

  • jjm

John M. ha scritto:

but this doesn’t

k.each do |x|
p system(“type -p #{x}”)
end

END
Regards,

Just a hint (maybe wrong): could this depend on the fact that “type”
is a
shell builtin, while “which” and “whereis” are external commands?

#why does this work?
k.each do |x|
p system(“which #{x}”)
end

and this work

k.each do |x|
p system(“whereis #{x}”)
end

which and whereis are real programs

but this doesn’t

k.each do |x|
p system(“type -p #{x}”)
end

whereas type is a shell builtin. On my system the standard shell is
dash,
which doesn’t recognize the -p switch.

NB: system just returns true or false, the output of the command is not
passed to ruby. Use %x for that.

mfg, simon … l