2017-04-18 12 views
0

cat <> somefilepath/fileCat EOFシェルスクリプトが意図したとおりに動作しませんか?

を使用してファイルの最後に情報を追加するシェルスクリプトを作成しようとしています。

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 ------------------------# 

シェルスクリプトを実行するときに不気味、ものを壊し、ファイルに見終わるEOFおよびペースト、すべてを無視しているようです。しかし、サーバーのSublimeとViでは、EOFを正しく認識しているようですが、実行中は破損します。どのようにしてサーバーがこの終了EOFを正しく認識できるようにすることができますか?私もこれを試してみた

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

ヘドラックマーカー 'EOF'の終わりはインデントしてはいけません。これは列1から始まり、末尾に空白を入れてはいけません。あなたがそれをインデントしたように見え、それが無視されている理由です。 – codeforester

+1

EOFをインデントする場合は、 'cat << -EOF'を使うとできます。' << - 'を使うと、先頭のインデントをすべて削除します。 (字下げが合理的であれば、例えば空白ではなくハードタブなど) –

+0

シェルスクリプトの最初の行に#/ bin/shを挿入しましたか? – pelya

答えて

0

このエラーは16.04にUbuntuの14.04からいくつかのスクリプトを移動するときに私のためにアップ示し始め運。たぶん、bashの動作のいくつかの変更。

#!/bin/bashの代わりに#!/bin/shを使用するようにスクリプトを変更した後、「cat <<EOF>file」が再び機能します。

関連する問題