包含别名的变量未被正确扩展

Variable containing alias not being expanded correctly

我正在尝试在 Windows 10 月 11 日在 WSL2 Debian 环境中自动化 minikube start 进程。

我已经在 .bash_aliases

中设置了这个别名
$ type minikube
minikube is aliased to `"/mnt/c/minikube/minikube.exe"'

我在 WSL2 启动时有这个脚本 运行:

$ cat wsl_minikube_start.sh
shopt -s expand_aliases
alias_location="${HOME}/.bash_aliases"
source "${alias_location}"
ministart="minikube start"
${ministart}
shopt -u expand_aliases

我相信它应该这样工作,但它显示 minikube 命令未找到。

$ bash wsl_minikube_start.sh
wsl_minikube_start.sh: line 5: minikube: command not found

(编辑了标题,以便将来更容易找到;当时还不清楚到底是什么问题。)

将命令放在变量中基本上总是一个坏主意,不仅因为它会干扰别名扩展(基本上,别名在变量扩展发生之前被解析)。参见例如https://mywiki.wooledge.org/BashFAQ/050

别名基本上也总是一个坏主意。用一个函数代替你的别名。

minikube () { "/mnt/c/minikube/minikube.exe" "$@"; }

或者,基本上等同地,在您的 PATH 中创建一个内容基本相同的包装脚本。

#!/bin/sh
exec "/mnt/c/minikube/minikube.exe" "$@"

回到第一个话题,不清楚为什么要用变量封装简单的命令minikube start;但如果这真的有某种目的,你也想为此使用一个函数。

ministart () { minikube start "$@"; }

"$@" 仅在您希望能够添加命令行参数时才有用。)