From: Damjan Rems on 9 Apr 2010 07:33 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 9 Apr 2010 07:46 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 9 Apr 2010 07:48 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 9 Apr 2010 07:41 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 9 Apr 2010 08:51
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 |