2016-05-15 74 views
0

我试图运行一个Bash脚本,它调用appcmd将站点添加到IIS。从Bash脚本的Appcmd用正斜杠替换反斜杠,如何防止?

#!/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

我在做什么错?

+0

试着改变你的sed模式也许'的sed的\/\\ g'' –

+0

这将产生一个错误:!'sed的:-e表达式#1,字符8:未终止的's'命令' – Ropstah

+0

@ l'L'l:这会产生相同的错误。但是我的'sed'部分实际上并没有产生错误,我'echo $ physicalPath'的值被替换了。只是在'IIS'中它会出现正斜杠,它不明白 – Ropstah

回答

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 

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是应用程序的内容的物理路径。

例如,要改变位置C的物理路径:\应用用于在名为contoso站点名为销售的应用程序,在命令提示以下,然后按ENTER键:

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

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

+0

虽然OP使用变量,但不使用硬编码字符串。 –

+0

我尝试了以下命令:'$ windir \\ syswow64 \\ inetsrv \\ appcmd set app /app.name:$domain/ /“[path ='/']。physicalPath:$ physicalPath”'(note:'domain $ /'是appname,并且还要注意'/“[path = ....”'后面的双引号。仍然IIS中的物理路径是正斜杠... – Ropstah