来自Bash脚本的Appcmd用反斜杠替换反斜杠,如何防止?

时间:2016-05-15 11:54:52

标签: bash backslash appcmd

我正在尝试运行Bash脚本,调用appcmd将网站添加到IIS。

#!/bin/bash

windir=c:\\windows
domain="$1"
path="$2"

#also tried using forward slashes by replacing backslashes
#physicalPath=`echo "$path" | sed 's/\\\\/\//g'`

#add site
$windir\\syswow64\\inetsrv\\appcmd add site /name:$domain /physicalpath:$path

我正在使用:

调用脚本
  

script.sh mydomain.com c:\ mypath

但是当我检查IIS时,网站的物理路径属性是使用正斜杠而不是反斜杠设置的。

appcmd Bash

我做错了什么?

2 个答案:

答案 0 :(得分:1)

来自https://technet.microsoft.com/en-us/library/cc725781%28v=ws.10%29.aspx的以下数据有帮助吗?

要更改应用程序内容的路径,请使用以下语法:

appcmd set app /app.name: string /[path='/'].physicalPath: string

变量app.namestring是应用程序的虚拟路径,physicalPathstring是应用程序内容的物理路径。

例如,要在名为contoso的站点中更改名为marketing的应用程序的位置c:\ application的物理路径,请在命令提示符处键入以下命令,然后按Enter:

appcmd set app /app.name: contoso / marketing /[path='/'].physicalPath:c:\ application

有关Appcmd.exe的详细信息,请参阅Appcmd.exe(IIS 7)。

答案 1 :(得分:1)

反斜杠用于防止某些字符的特殊处理:

$ z=foo
$ echo "$z"
foo
$ echo "\$z"
$z

因此,您需要转义反斜杠才能按字面意思使用它们。 shell将每对\\视为单个文字\

windir=c:\\\\windows
domain="$1"
path="$2"

#add site
"$windir"\\\\syswow64\\\\inetsrv\\\\appcmd add site /name:"$domain" /physicalpath:"$path"

但是,更简单的方法是将它们包含在单引号中。

windir='c:\\windows'
domain="$1"
path="$2"

#add site
"$windir"'\\syswow64\\inetsrv\\appcmd' add site /name:"$domain" /physicalpath:"$path"

(您也可以使用双引号,但由于有一些字符在双引号中具有特殊含义,因此可以使用反斜杠来转义它们,这意味着有时您需要转义反斜杠,有时候你不会。例如:

$ echo "\$"
$
$ echo "\t"
\t