[TxMt] Re: Spaces in the path/to/TextMate.app
Allan Odgaard
mailinglist at textmate.org
Sun Jul 26 10:03:30 UTC 2009
On 25 Jul 2009, at 01:53, Matt Neuburg wrote:
> What really caught me with my pants down is that in Ruby, a path
> used in
> IO.popen has to receive explicit escaping, although a path used in
> (say)
> "require" does not. However, I believe my pants are now back up again.
IO.popen effectively hands over your string to the shell, so it goes
through normal shell parsing.
> I did notice, though, doing a Google search on stuff like "TextMate
> space
> pathname", that I'm not the only person ever to encounter this issue.
Yeah, it is a very common problem. What you need to do is add this line:
require ENV['TM_SUPPORT_PATH'] + '/lib/escape'
Then whenever you send a string to the shell, use the e_sh function to
properly escape it. E.g.:
path = "some path with spaces"
dst = ENV['TMPDIR'] || "/tmp"
IO.popen("cp #{e_sh path} #{e_sh dst}", …)
Though since we are sending the string to the shell we can also use
shell variables and quote those to account for potential spaces, e.g.:
IO.popen("cp #{e_sh path} \"$TMPDIR\"", …)
Or more true to the org. code:
IO.popen("cp #{e_sh path} \"${TMPDIR:-/tmp}\"", …)
More information about the textmate
mailing list