我的剧本:
#!/bin/sh
cp -f host.tpl host.conf
mkdir -p /var/www/$1
server_replace="s,{server_name},$1,g"
sed -i $server_replace host.conf
alias_replace="s,{server_alias},$2,g"
sed -i $alias_replace host.conf
我正在做替换的文件(vhost.tpl):
<VirtualHost 0.0.0.0:80>
ServerName {server_name}
ServerAlias {server_alias}
DocumentRoot /var/www/{server_name}
</VirtualHost>
当我使用一个服务器别名
创建vhost时,它工作正常./vhost.sh domain.com www.domain.com
但是当我想要更多别名时
./vhost.sh domain.com "www.domain.com m.domain.com"
脚本失败并显示
之类的消息sed: -e expression #1, char 31: unterminated `s' command
我是否必须以某种方式转义空格字符才能在替换字符串中使用它?
答案 0 :(得分:1)
只需在$alias_replace
引用旁边放一对双引号:
sed -i.bkp "$alias_replace" host.conf
它应该做的伎俩。你只需要在第二个sed调用中执行它,但我强烈建议你引用两个变量。
答案 1 :(得分:1)
sed -i -e "s,{server_name},$1,g" -e "s,{server_alias},$2,g" host.conf
无需两个命令。每个需要使用双引号。
如果您愿意,可以避免使用-e
选项;我发现它们比替代方案更清晰。