2016-05-15 2 views
0

Ich versuche, ein Bash Skript auszuführen, das appcmd aufruft, um eine Website zu IIS hinzuzufügen.Appcmd von Bash-Skript ersetzen Backslashes mit Schrägstrichen, wie zu verhindern?

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

Ich rufe das Skript:

script.sh mydomain.com c:\mypath

Allerdings, wenn ich IIS überprüfen, die physikalische Eigenschaft Pfad des Standortes wird durch Verwendung von Slashes statt Schrägstriche.

appcmd Bash

Was mache ich falsch?

+0

Versuchen Sie Ihr sed Muster vielleicht ändert 'sed‚s \/\\ g'' –

+0

Dies erzeugt einen Fehler:! 'sed : -e Ausdruck # 1, Zeichenkette 8: nicht abgeschlossener 's Befehl' – Ropstah

+0

@ L'L: Dies erzeugt den gleichen Fehler. Aber mein 'sed' Teil erzeugt nicht wirklich einen Fehler, es werden die Werte ersetzt durch 'echo $ physicalPath'. Es ist nur, dass in IIS es mit Schrägstrichen kommen wird, die es nicht versteht – Ropstah

Antwort

1

Umgekehrte Schrägstriche verwendet werden spezielle Behandlung bestimmter Zeichen zu verhindern:

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

Aus diesem Grund müssen Sie Schrägstriche sich um entkommen wahrsten Sinne des Wortes, sie zu nutzen. Jedes Paar \\ wird von der Shell als einzelnes Literal \ gesehen.

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

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

Eine einfachere Möglichkeit, sie zu umgehen, ist jedoch, sie in einfache Anführungszeichen einzuschließen.

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

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

(Sie können auch doppelte Anführungszeichen verwenden, aber da gibt es ein paar Zeichen, die in doppelte Anführungszeichen besondere Bedeutung haben, kann ein Schrägstrich verwendet werden sie zu entkommen, was bedeutet, müssen Sie manchmal ein entkommen . Backslash, manchmal Sie dies nicht tun Zum Beispiel:

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

)

1

hilft die folgenden Daten von https://technet.microsoft.com/en-us/library/cc725781%28v=ws.10%29.aspx?

Um den Pfad eines Inhalt der Anwendung zu ändern, verwenden Sie die folgende Syntax:

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

Die Variable app.namestring ist der virtuelle Pfad der Anwendung und physicalPathstring ist der physikalische Pfad des Inhalts der Anwendung.

Zum Beispiel des physischen Pfad der Lage c zu ändern: \ Anwendung für eine Anwendung mit dem Namen Marketing in einer Site Contoso genannt, geben Sie Folgendes an der Eingabeaufforderung ein, und drücken Sie die Eingabetaste

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

Weitere Informationen zu Appcmd.exe finden Sie unter Appcmd.exe (IIS 7).

+0

Das OP verwendet jedoch Variablen und keine fest codierten Strings. –

+0

Ich habe den folgenden Befehl versucht: '$ windir \\ syswow64 \\ inetsrv \ appcmd setze app /app.name:$domain/ /" [path = '/']. PhysicalPath: $ physicalPath "' (Anmerkung: 'domain $/'ist appname und notiert auch doppelte Anführungszeichen um'/"[path = ...." '. Noch immer ist der physikalische Pfad in IIS mit Schrägstrichen ... – Ropstah

Verwandte Themen