Eu tenho a função 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 ;}
é semelhante às minhas outras funções. Quando tento obter .bashrc, recebo
$ 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 avisa para colocar aspas duplas em algo, mas não diz nenhum erro, então eu faço
dualpush() { cd "$WORKING_REACT_EXAMPLES"; cmpushall "$1"; cd ..; cmpushall "$1"; cd "$WORKING_REACT_EXAMPLES" ;}
e recebo o mesmo erro
O que está causando o erro de sintaxe? Obrigado
Responder1
Isso geralmente acontece quando o nome da função já está definido como umapelidocom parâmetros.
A substituição de alias acontece bem no início da análise do shell, portanto também afeta as declarações de funções (assim como outras coisas). Por exemplo, se você tivesse o seguinte...
alias dualpush="push; push --again"
dualpush() { push; push --again; }
... então seria expandido para:
push; push --again() { push; push --again; }
Se o alias original terminar com um comandosemparâmetros, as coisas ainda funcionam, mas a função está definida com o nome errado (entreoutrosurpresas potenciais!). Se, no entanto, o último comando nesse aliastemalguns argumentos, então a expansão não é mais reconhecida como uma declaração de função – em vez disso, ()
aparece no meio de um argumento de linha de comando e é rejeitada pelo analisador.
Responder2
Depois de fechar o terminal, exatamente o mesmo comando funciona. O Mac apresenta falhas ao usar funções bash e, após obter o bashrc com dualpush
comentários, ele permanece no terminal. Reiniciando todo o terminal, o mesmo comando funciona. Eu não entendo esse mau comportamento, mas isso não acontece comigo no Ubuntu