从Bash脚本的Appcmd用正斜杠替换反斜杠,如何防止?
我试图运行一个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,该网站的物理路径属性使用向前设置斜线而不是反斜杠。
我在做什么错?
中的反斜杠被用来防止某些字符的特殊待遇:
$ 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
)
从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)。
虽然OP使用变量,但不使用硬编码字符串。 –
我尝试了以下命令:'$ windir \\ syswow64 \\ inetsrv \\ appcmd set app /app.name:$domain/ /“[path ='/']。physicalPath:$ physicalPath”'(note:'domain $ /'是appname,并且还要注意'/“[path = ....”'后面的双引号。仍然IIS中的物理路径是正斜杠... – Ropstah
试着改变你的sed模式也许'的sed的\/\\ g'' –
这将产生一个错误:!'sed的:-e表达式#1,字符8:未终止的's'命令' – Ropstah
@ l'L'l:这会产生相同的错误。但是我的'sed'部分实际上并没有产生错误,我'echo $ physicalPath'的值被替换了。只是在'IIS'中它会出现正斜杠,它不明白 – Ropstah