以下是我的bash脚本将写入nginx配置文件的一段内容.
WEBAPP=example.com
APPFOLDER=abcapp
CONFFILENAME=abc.conf
read -r -d '' FILECONTENT <<'ENDFILECONTENT'
server {
listen 80;
client_max_body_size 2M;
server_name $WEBAPP;
root /var/virtual/stage.$WEBAPP/current/src/$APPFOLDER/webroot;
}
ENDFILECONTENT
echo "$FILECONTENT" > /etc/nginx/sites-available/$CONFFILENAME
Run Code Online (Sandbox Code Playgroud)
代码可以成功地编写内容/etc/nginx/sites-available/abc.conf.
不过,我有两个bash的变量$WEBAPP和$APPFOLDER.他们表现完全一样的文件,而不是内部example.com和abcapp这正是我打算.
如何使脚本按预期工作?
bash允许引用字符串中的换行符.它在双引号字符串()中进行参数替换(即,$FOO替换为值),但不在单引号字符串()中.FOO"$FOO"'$FOO'
所以你可以这样做:
FILECONTENT="server {
listen 80;
client_max_body_size 2M;
server_name $WEBAPP;
root /var/virtual/stage.$WEBAPP/current/src/$APPFOLDER/webroot;
}"
echo "$FILECONTENT" > /etc/nginx/sites-available/$CONFFILENAME
Run Code Online (Sandbox Code Playgroud)
你真的不需要FILECONTENT参数,因为你可以直接复制到文件:
cat >/etc/nginx/sites-available/$CONFFILENAME <<ENDOFCONTENT
server {
listen 80;
client_max_body_size 2M;
server_name $WEBAPP;
root /var/virtual/stage.$WEBAPP/current/src/$APPFOLDER/webroot;
}
ENDOFCONTENT
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,using <<ENDOFCONTENT指示$VARs应替换为其值<<'ENDOFCONTENT'将阻止参数替换.
| 归档时间: |
|
| 查看次数: |
5028 次 |
| 最近记录: |