J'ai travaillé sur un script qui automatise la configuration d'un environnement de développement pour le développement de Raspberry Pi (les détails étape par étape qui fonctionnent sont ici ). Le script est lié à cet article, mais vous pouvez le trouver ici également. Maintenant, lorsque vous exécutez ce script, installez et configurez l'environnement sans erreur, mais vous devez entrer votre mot de passe sudo plus d'une fois en raison de la valeur de délai d'expiration de sudo par défaut. J'ai donc commencé à expérimenter en supprimant toutes les lignes sudo et en exécutant l'intégralité du script via sudo à la ligne de commande, comme suit:
kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh
Cela fonctionne bien comme prévu et dure presque jusqu'à ce que:
./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected
Désormais, cette ligne fonctionnait correctement lorsque vous n'exécutiez pas tout le script avec sudo. À ma connaissance, rien dans cette ligne fonctionnant en tant que sudo ne devrait l’empêcher de fonctionner. Quelqu'un at-il des idées?
la source
dash
au lieu debash
. Essayez de déplacer le shebang dans la ligne 1.Réponses:
Le script ne commence pas par une ligne shebang , le système l'exécute avec
/bin/sh
. Sur Ubuntu,/bin/sh
est tableau de bord , une coque conçue pour le démarrage rapide et l' exécution avec seulement des caractéristiques standard. Lorsque le tiret atteint la ligne 68, il constate une erreur de syntaxe: cette parenthèse ne signifie rien dans le contexte.Comme dash (comme tous les autres shells) est un interprète, il ne se plaindra pas tant que l'exécution n'aura pas atteint la ligne problématique. Ainsi, même si le script avait démarré avec succès à un moment donné de vos tests, il aurait été abandonné une fois que la ligne 68 aurait été atteinte.
La ligne shebang doit être la toute première chose dans le fichier. Puisque vous utilisez les fonctionnalités bash, la première ligne du fichier doit être
#!/bin/bash
ou#!/usr/bin/env bash
.la source
sonarqube.sh
Ubuntu 15.10. Changé l'en-tête comme dit. L'exécutionsudo sh ./sonar.sh console
. Toujours avoir l'erreur.sonarqube.sh
ousonar.sh
? Décidez-vous. Et de toute façon, si vous ne pouvez pas résoudre le problème avec les informations contenues dans ce fil, posez une nouvelle question avec le contenu complet du script et copiez-collez le (s) message (s) d'erreur complet (s).#! /bin/sh
exécuté parfaitement. Maintenant, cela me laisse perplexe.Si le shebang n'est pas sur la première ligne, il ne sera pas respecté, quel que soit le shell de l'utilisateur racine, la
SHELL
variable ou le-s
drapeau. Vous pouvez facilement confirmer que ceci est avec un exemple simple:L'exécution de ce script avec sudo soulèvera une erreur de syntaxe dans les versions récentes d'Ubuntu et de Debian.
Vous avez deux options pour vous assurer que le script est interprété par
bash
:Déplace le shebang en première ligne
Courez
sudo
comme ça:la source
Pour moi, script de départ avec:
fonctionne bien.
la source
Peut-être avez-vous un "(" dans le répertoire ou le nom du fichier.
la source
Essayez dos2unix dans un fichier script. Parfois, des caractères cachés sont présents dans la source.
commander:
la source
Cela peut arriver si vous substituez l'interprète prévu. Cela fonctionnera par exemple avec sh quel que soit le hash bang utilisé (pratique lorsque vous n'utilisez pas le hash bang):
OU pour exécuter bash:
Pour le laisser utiliser la valeur de hachage définie par le script, utilisez ceci:
la source
Dans mon cas, l'erreur était le manque d'autorisations pour exécuter le fichier. J'ai reçu le message d'erreur seulement quand j'ai séparé les commandes:
la source