Cat EOF shell脚本无法按预期工作?

问题描述:

我想写一个shell脚本,使用猫<> somefilepath /文件Cat EOF shell脚本无法按预期工作?

将一些信息追加到文件的末尾。

cat <<EOF>> /etc/mysql/mysql.conf.d/mysqld.cnf 
    default_storage_engine = innodb 
    innodb_file_per_table = 1 
    innodb_file_format = Barracuda 
    EOF 

    service mysql restart 

    echo "" 
    echo "" 

    # Create moodle table in mysql 

    echo ------------------------# 
    echo 'Setting up moodle mysql' 
    echo ------------------------# 

古怪,运行shell脚本时,似乎忽略结束EOF和粘贴一切看到的入档,打破东西。但是,在服务器的Sublime和Vi中,它似乎能够正确识别EOF,但在运行时会中断。我怎样才能让服务器正确识别这个结束的EOF?

我已经试过这为好,没有运气

cat <<'EOF'>> somefilepath/file 
    blah 
    blah 
    blah 
    EOF 
+0

heredoc标记'EOF'的结尾不应该缩进 - 它应该从第1列开始,不应该有任何尾随空格。看起来你已经缩进了,这就是它被忽略的原因。 – codeforester

+1

请注意,如果你想缩进EOF,你可以这样做,如果你使用'cat

+0

您是否已将#/ bin/sh放在shell脚本的第一行? – pelya

此错误开始移动从Ubuntu的14.04某些脚本时16.04展示了我。也许bash的行为有所改变。

将脚本更改为使用#!/bin/sh而不是#!/bin/bash后,“cat <<EOF>file”再次起作用。