Tenía un script que funcionaba bien, pero cuando lo ejecuté hoy, dice declare: not found
. Estoy usando bash shell y la ruta al comienzo del script es correcta.
Dos líneas marcadas en mi script son las siguientes:
declare -a RESPONSE
RESPONSE=($RESULT)
También dice que (
es inesperado, pero supongo que está surgiendo debido al primer error. Vale la pena mencionar que cuando escribo declarar directamente funciona bien.
declare | grep USER
muestra
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Entonces, ¿qué pasa aquí?
#!/bin/bash
única. ¿Querías decir cómo lo ejecuto? Solo intenté ejecutarlo como./script.sh
y funcionó. Pero no funciona comoscript.sh
osh script.sh
y estoy bastante seguro de que solía usar solo los dos últimos métodos mientras lo creé hace una semana. ¿Qué podría explicar eso?Sospecho que su línea "shebang" (la primera línea opcional del archivo) hace referencia en
sh
lugar debash
. Debería serpara guiones bash. Si la primera línea de tu script es
entonces eso indicaría que se debe utilizar un shell estrictamente compatible con bourne; en el caso de Ubuntu,
dash
se usa. En muchas otras distribuciones, esto no causa un problema, ya que se vinculan/bin/sh
a/bin/bash
; sin embargo, ubuntu se enlaza para/bin/dash
permitir que los scripts del sistema se ejecuten más rápidamente.El
declare
incorporado es una debash
las muchas extensiones de la especificación de script de shell Bourne;dash
solo implementa esa especificación sin extensiones.fuente
#!/bin/bash
solosh thescript.sh
, elsh
shell, es decir,dash
lo interpretará.sh script.sh
. Entiendo lo que dijiste, pero he leído en alguna parte que con este métodobash
lo interpretarás. ¿Por quédash
conseguirlo aquí? ¿Es solo con Ubuntu? Puede ser lo que leí para Linux en general.sh script
usted está ejecutando el comandosh
con el argumentoscript
, lo que hace que sh lea y ejecute los comandos en ese archivo. El shebang no se lee por sh, comienza con un#
, por lo que se trata como un comentario. Si, en su lugar./script
, ejecuta , el núcleo leerá el shebang, que en su caso es#!/bin/bash
, y así se ejecuta/bin/bash ./script
dash
se usará, así que necesito aclararloCómo reproducir el error anterior:
Estoy usando Ubuntu 14.04 de 64 bits. Pon este código en un archivo:
Ejecútelo así:
Para solucionarlo, haga esto en su lugar:
Huellas dactilares:
fuente
Tuve el mismo problema, y luego recordé que debes asignar los permisos correctos para ejecutar el script de shell.
Cambiar el permiso del script, por ejemplo:
fuente
Intente ejecutar su script usando la
/bin/bash
línea de comando en su lugar sish
(:En lugar de :
Tratar :
fuente
En Ubuntu, puede tener un script que está ejecutando otros scripts dentro de él, con los que me he encontrado.
Cambiando todo
sh some_script.sh
para$SHELL some_script.sh
arreglarlo.fuente