Question

Je le code suivant dans un script shell. Cela semble ne fonctionner que quand il est pas défini dans une fonction. La ligne problématique est celui qui contient le « << ». Le message d'erreur est

  

» ./ run: ligne 210: erreur de syntaxe:   fin de fichier inattendue "

Comment puis-je écrire cela correctement dans une fonction?

init_database()
{
    cd ../cfg
    db.sh << ENDC
    $DB_ADMIN

    0
    y
    n
    ENDC

    check_status

    sqlplus $DB_SCHEMA@$DB_NAME < initial_data.sql

    cd -
}
Était-ce utile?

La solution

Il y a un certain nombre de façons de résoudre ce problème.

1 / Désindenter le marqueur de fin du document ici, par exemple:

cat <<EOF
    hello
    $PWD
EOF

mais fera de votre code laid.

2 / "indent" le document ici marqueur de début:

cat <<' EOF'
    hello
    $PWD
    EOF

où que peu avant le premier EOF est exactement le même que celui avant la seconde (tab, quatre espaces, deux pattes, que ce soit). Cela vous permet de garder votre belle indentation, même si elle ne se développe pas ici variables dans le document-(ne change pas $PWD).

3 / Autoriser les languettes à décaper à partir du début de lignes d'entrée et le marqueur de fin.

cat <<-EOF
    hello
    $PWD
    EOF

mais il n'y a aucun moyen de pattes dans les débuts de lignes.

4 / Pour vos besoins, vous pouvez également utiliser:

(   echo "$DB_ADMIN";
    echo "" ;
    echo "0" ;
    echo "y" ;
    echo "n"
) | db.sh
check_status
sqlplus $DB_SCHEMA@$DB_NAME < initial_data.sql
cd -

Je crois que le numéro 4 est la meilleure option pour vous. Il permet jusqu'à belle doublure des entrées, des onglets et des espaces partout dans les lignes et l'expansion variable.

Autres conseils

La fin de « document en » doit être sans retrait, je le crains.

L'étiquette doit être seul ENDC en ligne sans entraîner / whitspaces arrière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top