Forum Programmation.shell Une ligne qui s'exécute en ligne de commande, mais pas depuis un script

Posté par  . Licence CC By‑SA.
Étiquettes :
0
12
fév.
2020

J'ai un script tout bête qui contient entre autre ça:

    #!/bin/bash
    # d'autres lignes...
    cd python/lib/python3.8 && rm -rfv !("site-packages")

Je peux copier-coller cette ligne dans un terminal bash ou elle s'exécutera correctement, par contre en lançant ./script.sh j'obtiens l'erreur suivante:
./script.sh: ligne 24: erreur de syntaxe près du symbole inattendu « ( »

Que faire ?

  • # dash

    Posté par  (site web personnel) . Évalué à 2.

    Tu es sur de ton shebang ? Ce ne serait /bin/sh par hasard et tu pourrais être sous dash (Debian et dérivée).

    En tout cas, je ne connaissais pas l'astuce !() pour exclure un fichier. Intéressant.

    • [^] # Re: dash

      Posté par  . Évalué à 1.

      Tu es sur de ton shebang ?

      Si je tape /bin/bash, j'arrive bien sur un terminal dans lequel je peux exécuter la ligne en question.

      • [^] # Re: dash

        Posté par  . Évalué à 9. Dernière modification le 12 février 2020 à 13:05.

        Il faut activer dans le script, l'option qui autorise cette syntaxe (Pathname Expansion):

        shopt -s extglob
        rm !(file1|file2)

        Ce serait mieux, AMHA, avec un find, plutôt qu'un cd+rm

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.