我有这样的剧本:
build.sh
#!/bin/bash
MSBUILD="/c/Program\ Files \(x86\)/MSBuild/14.0/Bin/msbuild.exe my.sln //p:Configuration=Debug //t:Rebuild"
$MSBUILD
错误
/c/Program:没有这样的文件或目录
我尝试了许多以上的组合。巴什不会认出这条路上的空间。我该怎么做呢?
发布于 2016-03-18 05:08:37
这就是我最终使用的:
MSBUILD[0]="/c/Program Files (x86)/MSBuild/14.0/Bin/msbuild.exe"
MSBUILD[1]=./mySolutionName.sln
MSBUILD[2]=/property:Configuration=Debug
MSBUILD[3]=/target:Clean,Build
"${MSBUILD[0]}" "${MSBUILD[1]}" "${MSBUILD[2]}" "${MSBUILD[3]}"
我无意中发现了类似的问题与可变展开打交道。还请注意,速记对我不起作用:
"/p:Configuration=Debug"
变成"/property:Configuration=Debug"
发布于 2016-03-17 23:51:08
对bash更有洞察力的人应该能够解释这背后的确切机制,因为我不能,但我知道如何应用一种解决方案:只有在展开变量时才使用引号(否则引号显然也会被解释),并使用数组,否则不能使用引号。还请注意,/
应该是单一的。
MSBUILD[0]=/c/Program\ Files \(x86\)/MSBuild/14.0/Bin/msbuild.exe
MSBUILD[1]=my.sln
MSBUILD[2]=/p:Configuration=Debug
"$MSBUILD[@]"
发布于 2016-03-21 14:28:43
当您使用包含空格的路径/命令时,您需要首先引用路径,这将适用于您:
test.proj
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Message Text="Hello World! $(ABC)" Importance="high"/>
</Target>
</Project>
build.sh
#!/bin/bash
MSBUILDPATH=c:/Program\ Files\ \(x86\)/MSBuild/14.0/Bin/msbuild.exe
"$MSBUILDPATH" test.proj //t:build //p:ABC=123
或者(反斜杠在里面)
#!/bin/bash
MSBUILD=c\:\\Program\ Files\ \(x86\)\\MSBuild\\14.0\\Bin\\msbuild.exe
"$MSBUILD" test.proj //t:build //p:ABC=123
我正在传递目标(/t:)和属性(/p:),没有问题,只需为它们使用双斜杠即可。还请注意驱动器字母后面的冒号(:)。
如果需要传递包含空格的属性,只需执行以下操作:
"$MSBUILD" test.proj //t:build //p:ABC="123 456 789"
您可以先定义路径,然后在引号中使用它们来执行命令。
您可以复制粘贴此附件,它将为您工作。
https://stackoverflow.com/questions/36075203
复制相似问题