2017-04-18 49 views
0

我想寫一個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 << - EOF'使用'<< - '會導致所有前導縮進被刪除。 (假設縮進是合理的,例如硬標籤,而不是空格) –

+0

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

回答

0

此錯誤開始移動從Ubuntu的14.04某些腳本時16.04展示了我。也許bash的行爲有所改變。

將腳本更改爲使用#!/bin/sh而不是#!/bin/bash後,「cat <<EOF>file」再次起作用。