Por que 'source ~ / .bash_aliases' está saindo com erro de sintaxe?

5

Qual é o erro de sintaxe neste arquivo? Eu não consigo identificá-lo.

set-k8s-azure() { 
  export KUBECONFIG=~/.kube/config.azure-1 
}

set-k8s-minikube() { export KUBECONFIG=~/.kube/config.minikube }

minikube() {
  if [[ $@ == start* ]]; then
    set-k8s-minikube
  fi
  command minikube "$@"
}

alias pulr='if output=$(git status --porcelain) && [ -z "$output" ]; then git pull --rebase; else git stash save "pulr WIP saved" && git pull --rebase && git stash pop; fi'
alias vi=nvim

source ~/.bash_aliases produz:

bash: /home/niel/.bash_aliases: line 1: syntax error near unexpected token '('
bash: /home/niel/.bash_aliases: line 1: 'set-k8s-azure() { '
    
por Niel de Wet 14.12.2017 / 16:29

2 respostas

2

Os traços não são válidos nos nomes das funções. (Para mais detalhes, consulte Existem problemas com hifens em funções, aliases e executáveis? ) Bash é normalmente tolerante de certos caracteres inválidos, mas em alguns casos não é, e eu não tenho idéia do porquê, apesar de eu ter visto isso antes . Então substitua os traços por sublinhados (e adicione um ponto-e-vírgula como Kusalananda disse) e tudo ficará bem:

set_k8s_azure() { 
  export KUBECONFIG=~/.kube/config.azure-1 
}

set_k8s_minikube() { export KUBECONFIG=~/.kube/config.minikube; }
    
por 15.12.2017 / 03:04
11

Acredito que o erro de sintaxe está aqui:

set-k8s-minikube() { export KUBECONFIG=~/.kube/config.minikube }

A construção {...} precisa de uma nova linha ou de um ; antes do final } :

set-k8s-minikube() { export KUBECONFIG=~/.kube/config.minikube; }

Além disso, aconselho que use $HOME em vez de ~ em scripts, em parte porque serve como documentação e em parte porque $HOME se comporta como uma variável, enquanto ~ não (consulte Por que o til (~) não expande as aspas duplas? ).

    
por 14.12.2017 / 16:33

Tags