From: Damjan Rems on

You can run linux command:

a = `ls /home`

and receive output in variable a.

But I would like /home to be variable. So I would invoke command like
this:

a = `"ls #{dir}"`

This of course doesn't work, but I hope you get the point.

a = system("ls #{dir}") works, but returns only true or false not the
standard output of command.

How can I get standard output of the command and use variable as
parameter?


by
TheR
--
Posted via http://www.ruby-forum.com/.

From: Albert Schlef on
Damjan Rems wrote:
>
> You can run linux command:
>
> a = `ls /home`
>
> and receive output in variable a.
>
> But I would like /home to be variable. So I would invoke command like
> this:
>
> a = `"ls #{dir}"`

As Ryan said, you need to remove the double quotes. You're asking the
shell to execute the "ls whatever" command. There's no such command.

BTW, you actually want double quotes there, but put them around the
parameter:

a = `ls "#{dir}"`

The purpose of the double quotes here is to protect against the case
where the 'dir' variable contain spaces (which are meaningful to the
shell --they separate tokens).
--
Posted via http://www.ruby-forum.com/.

From: Marc Weber on
Learn about Dir object. It has methods such as glob which should give
you directory contents. Then you don't have to care about stdout, nor
quoting.

http://whynotwiki.com/Comparison_of_Escape_class_and_String.shell_escape

Have a look at the first example here

Marc

From: Ryan Davis on

On Apr 9, 2010, at 04:33 , Damjan Rems wrote:

> a = `"ls #{dir}"`
>
> This of course doesn't work, but I hope you get the point.

remove the double quotes

From: Marc Weber on
Excerpts from Albert Schlef's message of Fri Apr 09 13:46:34 +0200 2010:
> Damjan Rems wrote:
> >
> > You can run linux command:
> >
> > a = `ls /home`
> >
> > and receive output in variable a.
> >
> > But I would like /home to be variable. So I would invoke command like
> > this:
> >
> > a = `"ls #{dir}"`
>
> As Ryan said, you need to remove the double quotes. You're asking the
> shell to execute the "ls whatever" command. There's no such command.
>
> BTW, you actually want double quotes there, but put them around the
> parameter:
>
> a = `ls "#{dir}"`
>
> The purpose of the double quotes here is to protect against the case
> where the 'dir' variable contain spaces (which are meaningful to the
> shell --they separate tokens).

If we got hat route you want ls -- ${dir} to protect against directories
called "-a" or such .. And keep in mind that directories may contain
slashes and such stuff on linux. eg try mkdir a\\b
thus using quotes is not enough. It may work for most cases you use
though. Anyway I'd do it right - you never know.

Marc Weber