2017-04-18 8 views
0

J'essaie d'écrire un script shell qui utilise cat <> somefilepath/fileLe script shell EOF Cat ne fonctionne pas comme prévu?

pour ajouter des informations à la fin du fichier.

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

weirdly, lors de l'exécution du script shell, il semble ignorer les EOF et les pâtes se terminant tout vu dans le fichier, le casser. Cependant, dans Sublime et dans Vi sur le serveur il semble reconnaître l'EOF correctement, mais il casse en cours d'exécution. Comment puis-je faire en sorte que le serveur reconnaisse correctement cette EOF de fin?

J'ai essayé cela aussi, pas de chance

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

La fin du marqueur hérédoc 'EOF' ne devrait pas être indentée - elle devrait commencer à partir de la colonne 1 et ne devrait pas avoir d'espaces de fin. On dirait que vous l'avez indenté et c'est la raison pour laquelle il est ignoré. – codeforester

+1

Notez que si vous voulez * indenter l'EOF, vous pouvez le faire si vous utilisez 'cat << - EOF'' l'aide de '<< -' provoque la suppression de toutes les indentations. (À condition que l'indentation soit raisonnable, par exemple des onglets durs, pas des espaces) –

+0

Avez-vous placé #/bin/sh dans la première ligne de votre script shell? – pelya

Répondre

0

Cette erreur a commencé à apparaître pour moi lors du déplacement des scripts d'Ubuntu 14,04 à 16,04. Peut-être que certains changements dans le comportement de bash. Après la modification des scripts pour utiliser #!/bin/sh au lieu de #!/bin/bash, "cat <<EOF>file" fonctionne à nouveau.