这是我的bash脚本,它编写一个自定义的nginx服务器块,也就是虚拟主机。
sudo tee /etc/nginx/sites-available/master <<EOF
server {
listen 80;
server_name localhost;
root /home/capt/WebRoot;
location / {
index index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
EOF
一切都写得很好,除非这部分有一个$:
fastcgi_param PATH_INFO ;
fastcgi_param PATH_TRANSLATED ;
fastcgi_param SCRIPT_FILENAME ;
如何解决此问题?
答案 0 :(得分:3)
引用您的EOF
:
sudo tee /etc/nginx/sites-available/master <<'EOF'
BTW:任何$
的内容都应该被破坏,而不仅仅是提到的行。
示例:
#! /bin/bash
cat <<'EOF'
a=$1
EOF
cat <<EOF
a=$1
EOF
执行:
bash test.sh
a=$1
a=
答案 1 :(得分:1)
使用反斜杠$
转义每个\
字符。
所以这三行应该是这样的:
fastcgi_param PATH_INFO \$fastcgi_path_info;
fastcgi_param PATH_TRANSLATED \$document_root\$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
我想文件中早先(至少)$uri
也有问题,你可能错过了。因此,恰好逃避$
的每一次出现。
答案 2 :(得分:1)
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
由于上面以$
开头的单词在bash中被视为变量,并且尚未初始化,因此它们为空。您应该完全期望得到的输出。按照提供的方式,使用$
转义\$
,您就可以了。