在shell中引用时,目录名称带括号,如:
/tmp/(example)
需要像以下一样进行转义:
/tmp/\(example\)
当我在ruby的system
调用中引用它们时,我必须逃避它们,或者不依赖于它们是否是第一个参数。
非转义目录作为第一个参数。故障。
system('/tmp/(example)/script')
#>> sh: -c: line 0: syntax error near unexpected token `example'
#>> sh: -c: line 0: `/tmp/(example)/script'
#=> false
将转义目录作为第一个参数。成功。
system('/tmp/(example)/script'.shellescape)
#=> true
非转义目录作为第二个参数。成功。
system('touch', '/tmp/(example)/script')
#=> true
将转义目录作为第二个参数。故障。
system('touch', '/tmp/(example)/script'.shellescape)
#>> touch: /tmp/\(example\)/script: No such file or directory
#=> false
似乎system
转义了每个参数的名称,但命令(第一个参数)。这是脚本中的问题,其命令具有相对路径,例如:
system("#{__dir__}/something")
system
会这样做?