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).
Excerpts from Albert S.'s message of Fri Apr 09 13:46:34 +0200 2010:
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.
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 viahttp://www.ruby-forum.com/.
Keep in mind that ls #{dir} (without the quotes) is also DANGEROUS.
What if you (or someone) set dir = “~; rm -rf ~”? BAD.
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 viahttp://www.ruby-forum.com/.
Keep in mind that ls #{dir} (without the quotes) is also DANGEROUS.
What if you (or someone) set dir = “~; rm -rf ~”? BAD.
So, using quotes is also safer.
No, using quotes isn’t safer:
dir = ‘123" ; rm -rf ~ ; echo "’ ls "#{dir}"
Results it doing ls “123” ; rm -rf ~ ; echo “”
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.