Project

General

Profile

Feature #16741

Implement Shellwords.shellescape correctly for Windows

Added by abobrikovich (Alexander Bobrikovich) 4 months ago. Updated 4 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:97611]

Description

shellwords module was originally designed and developed for *NIX, and currently works like this:

require 'shellwords'

Shellwords.shellescape("/home/me/test with space.txt")
# => "/home/me/test\\ with\\ space.txt"

Shellwords.shellescape("C:\Program Files")
# => "C:Program\\ Files"

I think it's a good opportunity to extend it to support Windows. According to [2], it looks like using quotations is the only option for paths used in a batch script that have space inside. I propose:

Shellwords.shellescape("C:\Program Files")
# => "\"C:\Program Files\""

Links

  1. https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
  2. https://superuser.com/a/962816/245944
  3. https://ss64.com/nt/syntax-esc.html

Updated by znz (Kazuhiro NISHIYAMA) 4 months ago

I think adding Shellwords.cmdescape is better than changing Shellwords.shellescape.

Some environments on Windows support both bash and cmd.

Updated by mame (Yusuke Endoh) 4 months ago

I agree with @znz. IMO, a gem named cmdwords or something would be a good start for the feature instead of directly extending shellwords.

#3

Updated by sawa (Tsuyoshi Sawada) 4 months ago

  • Description updated (diff)
  • Subject changed from Implement Shellwords.shellescape correctly on Windows to Implement Shellwords.shellescape correctly for Windows

Updated by nobu (Nobuyoshi Nakada) 4 months ago

I'm curious for what purpose you need to escape paths.
To pass it to another program, it is better to spawn or system with split array.

Also available in: Atom PDF