2016-05-15 106 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