J'avais un script qui fonctionnait bien mais quand je l'ai exécuté aujourd'hui, ça dit declare: not found
. J'utilise le shell bash et le chemin au début du script est correct.
Deux lignes marquées dans mon script sont les suivantes:
declare -a RESPONSE
RESPONSE=($RESULT)
Il dit également que (
c'est inattendu, mais je suppose que cela arrive à cause de la première erreur. Il convient de mentionner le point lorsque je tape dans déclarer directement fonctionne bien.
declare | grep USER
spectacles
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Alors, qu'est-ce qui ne va pas ici?
#!/bin/bash
seulement. Voulez-vous dire comment je l'exécute? J'ai juste essayé de l'exécuter au fur./script.sh
et à mesure. Mais cela ne fonctionne pas commescript.sh
oush script.sh
et je suis à peu près sûr que je n'utilisais que les deux dernières méthodes lors de ma création il y a une semaine. Qu'est-ce qui pourrait expliquer cela?Je soupçonne que votre ligne "shebang" (la première ligne facultative du fichier) fait référence à la
sh
place debash
. CA devrait etrepour les scripts bash. Si la première ligne de votre script est
cela indiquerait alors qu'une coque strictement compatible avec la bourne doit être utilisée; dans le cas d'Ubuntu,
dash
est utilisé. Dans de nombreuses autres distributions, cela ne pose pas de problème, car elles sont liées/bin/sh
à/bin/bash
; cependant ubuntu établit un lien vers/bin/dash
afin de permettre aux scripts système de s'exécuter plus rapidement.Le
declare
builtin est l'une desbash
nombreuses extensions de la spécification de script shell Bourne;dash
implémente simplement cette spécification sans extensions.la source
#!/bin/bash
seulementsh thescript.sh
, lesh
shell - iedash
l'interprétera.sh script.sh
. Je comprends ce que vous avez dit, mais j'ai lu quelque part qu'avec cette méthode,bash
je vais l'interpréter. Pourquoidash
le jouer ici? Est-ce uniquement avec Ubuntu? Peut-être que ce que j'ai lu était pour Linux en général.sh script
vous exécute la commandesh
avec l'argumentscript
, qui fait lire et exécuter les commandes dans ce fichier. Le shebang n'est pas lu par sh, il commence par un#
, il est donc traité comme un commentaire. Si vous exécutez à la place./script
, le noyau lira le shebang, ce qui dans votre cas est#!/bin/bash
, et ainsi il s'exécute/bin/bash ./script
dash
sera utilisée, donc je dois le clarifierComment reproduire l'erreur ci-dessus:
J'utilise Ubuntu 14.04 64 bits. Mettez ce code dans un fichier:
Exécutez-le comme ceci:
Pour le réparer, faites ceci à la place:
Tirages:
la source
J'ai eu le même problème, puis je me suis souvenu que vous devez attribuer les bonnes autorisations pour exécuter le script shell.
Modifiez l'autorisation du script, par exemple:
la source
Essayez
/bin/bash
plutôt d' exécuter votre script en utilisant la ligne de commande sish
(:Au lieu de :
Essayez:
la source
Sur Ubuntu, vous pouvez avoir un script qui exécute d'autres scripts en lui, que j'ai rencontré.
Tout changer
sh some_script.sh
pour le$SHELL some_script.sh
réparer.la source