2

I want to write configuration information to a specific file which has dollar signs ($) inside. That seems to be a problem.

Here's what I did:

$ cat >> /etc/nginx/nginx.conf <<EOF
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    ## Detect when HTTPS is used
    map $scheme $https {
      default off;
      https on;
    }
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}
EOF

How can I solve this?

5

Quote EOF:

$ var=foo
$ cat << EOF
> $var
> EOF
foo
$ cat << 'EOF'
> $var
> EOF
$var

From man bash:

If any characters in word are quoted, the delimiter is the result of quote removal on word, and the lines in the here-document are not expanded.

  • Thanks it works. Could you explain what the 'EOF' doe exactly? Thanks – TheNiceGuy Dec 8 '13 at 23:21
  • 2
    @Michael - It's just the delimiter that indicates the end of the heredoc. You could just as validly use FOO, and end the heredoc with FOO on a line by itself. – Chris Down Dec 8 '13 at 23:21
  • @Michael - please be sure to mark this as the accepted answer so that others know your issue's been resolved. – slm Dec 8 '13 at 23:55
  • I do not understand the purpose of such subtlety in bash. Is it by design? Could some one explain. Thanks. – mkc Dec 9 '13 at 0:14
  • yes It is by design. If you want to use variables in your here-document you want one behavior, If you want simpler quoting you want another. – hildred Dec 9 '13 at 2:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.