为什么 `source ~/.bash_aliases` 退出并出现语法错误?

为什么 `source ~/.bash_aliases` 退出并出现语法错误?

该文件中的语法错误是什么?我看不出来。

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产生:

bash: /home/niel/.bash_aliases: line 1: syntax error near unexpected token `('
bash: /home/niel/.bash_aliases: line 1: `set-k8s-azure() { '

答案1

我相信语法错误在这里:

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

该构造在最后一个之前{...}需要换行符或 a :;}

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

另外,我建议您使用$HOME而不是~在脚本中使用,部分原因是它用作文档,部分原因是其$HOME行为类似于变量,而~并非如此(请参阅为什么波形符 (~) 不在双引号内展开?)。

答案2

破折号在函数名称中无效。 (有关更多详细信息,请参阅 函数、别名和可执行文件中的连字符是否存在问题?)Bash 通常可以容忍某些无效字符,但在某些情况下却不能,我不知道为什么,尽管我已经以前见过这个。因此,用下划线替换破折号(并像 Kusalananda 所说的那样添加分号),就可以了:

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

set_k8s_minikube() { export KUBECONFIG=~/.kube/config.minikube; }

相关内容