.bash_profile: línea 260: error de sintaxis cerca del token inesperado `('

.bash_profile: línea 260: error de sintaxis cerca del token inesperado `('

Tengo función bash:

WORKING_REACT_EXAMPLES="$HOME/tutorials/javascript/react/working-react-examples"
dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall $1; cd $WORKING_REACT_EXAMPLES ;}

Se parece a mis otras funciones. Cuando intento obtener .bashrc obtengo

$ src
-bash: /Users/cchilders/.bash_profile: line 260: syntax error near unexpected token `('
-bash: /Users/cchilders/.bash_profile: line 260: `dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall "$1"; cd $WORKING_REACT_EXAMPLES ;}'

Shellcheck advierte que se deben citar dos veces algo, pero no dice ningún error, así que lo hago

dualpush() { cd "$WORKING_REACT_EXAMPLES"; cmpushall "$1"; cd ..; cmpushall "$1"; cd "$WORKING_REACT_EXAMPLES" ;}

y obtengo el mismo error

¿Qué está causando el error de sintaxis? Gracias

Respuesta1

Esto suele suceder cuando el nombre de la función ya está definido comoaliascon parámetros.

La sustitución de alias ocurre bastante temprano en el análisis del shell, por lo que también afecta las declaraciones de funciones (así como otras cosas). Por ejemplo, si tuviera lo siguiente...

alias dualpush="push; push --again"

dualpush() { push; push --again; }

...entonces se ampliaría a:

push; push --again() { push; push --again; }

Si el alias original termina con un comandosinparámetros, las cosas todavía funcionan pero la función está definida con el nombre incorrecto (entreotroposibles sorpresas!). Sin embargo, si el último comando en ese aliastienealgunos argumentos, entonces la expansión ya no se reconoce como una declaración de función; en cambio, ()aparece en medio de un argumento de la línea de comandos y el analizador la rechaza.

Respuesta2

Después de cerrar la terminal, funciona exactamente el mismo comando. Mac tiene fallas al usar funciones bash y, después de obtener bashrc dualpushcomentado, permanece en la terminal. Al reiniciar toda la terminal, funciona el mismo comando. No entiendo este mal comportamiento, pero esto no me sucede en ubuntu

información relacionada