2016-05-15 3 views
0

Я пытаюсь запустить сценарий Bash, который вызывает appcmd, чтобы добавить сайт в IIS.Appcmd из сценария Bash, заменяющего обратную косую черту косой чертой, как предотвратить?

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

Попробуйте изменить ваш СЭД шаблон может быть 'СЭД«s \/\\ g'' –

+0

Это приводит к ошибке:! 'SED : -e выражение # 1, char 8: unterminated 's 'command' – Ropstah

+0

@ l'L'l: это приводит к той же ошибке. Но моя 'sed' часть на самом деле не создает ошибку, она« echo $ physicalPath »заменяет значения. Это просто, что в «IIS» он будет иметь косые черты, которые он не понимает. – Ropstah

ответ

1

Обратных косые используются для предотвращения специальной обработки некоторых символов:

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

Из-за этого, вам нужно бежать сам слеш для того, чтобы использовать их в буквальном смысле. Каждая пара \\ видна оболочкой как единый литерал \.

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, введите следующую команду в командной строке и нажмите клавишу ВВОД:

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

Для получения дополнительных сведений о Appcmd.exe см. Appcmd.exe (IIS 7).

+0

OP использует переменные, но не жестко закодированные строки. –

+0

Я пробовал следующую команду: '$ windir \\ syswow64 \\ inetsrv \\ appcmd установить приложение /app.name:$domain/ /" [path = '/']. PhysicalPath: $ physicalPath "' (note: 'domain $/'- имя приложения, а также примечание о двойных кавычках вокруг'/'[path = .... "'. Все же физический путь в IIS связан с косой чертой ... – Ropstah

 Смежные вопросы

  • Нет связанных вопросов^_^