我如何在耙子任务中使用带有空间的路径



我正在尝试为我的ASP.NET应用程序创建一个Rakefile。这是mstest.exe文件的路径:

mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"

这是我拥有的Rakefile的一部分:

task :default do
      mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
      sh "#{mstest_file} "#{testdll_file} "
end

我得到此错误:

rake中止了! Albacore :: CommandnotFoundError:命令失败,状态(127) - 编号127特别是指操作系统找不到可执行文件:

c:/program Files(x86)/Microsoft Visual Studio 12.0/common7/inde/mstest.exe

我认为路径中的空间会导致错误:"程序文件(86X)/Visual Studio ...",因为如果路径中没有空间,则Rakefile可以正常工作。

我已经尝试了这些事情,但还没有成功的结果:

  1. mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
  2. mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
  3. mstest = "C:/Programs Filess (x86)/Microsofts Visuals Studio 12.0/Common7/IDE/mstest.exe"
  4. mstest = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\mstest.exe"
  5. 将mstest和#{mstest}放入这两个引号,双引号和组合中。

我该如何修复?

问题是您使用的是带有逃逸空间的双引号,而不是单引号。考虑以下内容:

"foo bar" # => "foo bar"
'foo bar' # => "foo\ bar"

或:

"C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe" 
# => "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
'C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe' 
# => "C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"

请注意,第一个使用双重报价是如何使用字面字符说的。当解释器遇到" "时。使用单价,这是"使用BackSlash",然后是一个空间&quot,您要使用它,因为您希望Backslash在通过字符串时传播到OS。

确实,您可能应该考虑使用Ruby的内置ShellWords类:

操纵字符串,例如Unix Bourne Shell

此模块根据Unix Bourne Shell的解析规则来操纵字符串。

特别是查看shellescape

逃脱了一个字符串,以便可以在Bourne Shell命令行中安全使用。

考虑一下:

require 'shellwords'
'C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe' 
# => "C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"
Shellwords.escape("C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe")
# => "C:/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"

注意shellescape如何逃脱了括号。

相关内容

  • 没有找到相关文章

最新更新