37

我正在尝试在 Windows 上使用 bash (sh) 脚本来运行测试部署。我正在从 gitbash 控制台运行脚本,以便拥有 bash 的副本,但这样做意味着 azure clie 不可用(即找不到 azure 命令)。有谁知道我如何让 Azure cli 在 GitBash 中工作(我假设我只是将它安装在其他地方)或者我应该更改为使用 bash 的不同方式

4

10 回答 10

57

有时 Windows git bash 中的命令需要附加 .cmd。此外,另一种安装 Azure-Cli 的方法是通过 Chocolatey https://chocolatey.org/

安装 Azure-Cli 后尝试此命令:

az.cmd --version

与mscrivo 相呼应,您可以在 CMD而不是 PowerShell中运行以下行(提升/管理员)

echo "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} > "C:\Program Files\Git\mingw64\bin\az" 

现在你应该可以在 Git bash 中运行了:

az --version
于 2017-11-02T22:33:33.000 回答
31

artberri 在评论中指出了最佳解决方案:

将以下内容添加到您的%USERPROFILE%\.bashrc%USERPROFILE%\.profile

alias az='az.cmd'

但是,如果您希望能够在 bash 脚本中使用 az,则需要一些更激烈的东西,从 cmd 提示符运行以下命令:

echo "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} > "%SYSTEMROOT%\az"

这实际上将在您的 windows 文件夹中创建一个 passthrough az 命令,该命令可以从任何地方运行并将参数传递给 az.cmd。

于 2018-01-12T21:16:14.513 回答
9

如果使用 Git bash,请导航到以下目录:

C:\Program Files\Git\etc\profile.d

Git bash 目录的 Windows 资源管理器

编辑,然后为如下aliases.sh添加一个新别名:az

alias az='az.cmd'

aliases.sh 的示例

于 2020-02-07T00:09:37.780 回答
6

您必须将 CLI 安装到您的计算机上。有多种方法可以做到这一点。

我是 NodeJS 的朋友,所以我使用 npm 进行安装:

npm install -g azure-cli

更多详细信息:https ://www.npmjs.com/package/azure-cli

但你也可以通过其他方式做到这一点。一个非常好的方法是使用 docker。Microsoft 提供的容器预装了 Azure CLI 版本。

docker run -it --name azure microsoft/azure-cli

在带有 ubuntu bash 的 Windows 10 上,您可以使用:

echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | \
     sudo tee /etc/apt/sources.list.d/azure-cli.list

sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 417A0893
sudo apt-get install apt-transport-https
sudo apt-get update && sudo apt-get install azure-cli

或者作为 python 爱好者运行

pip install --user azure-cli

最重要的是“az”/“az.bat”或“azure”bin 可通过您的路径变量获得。

于 2017-04-27T20:08:52.490 回答
2

在您的~/bin目录中(在 Windows 中,这意味着c:\Users\<username>\bin)我刚刚创建了一个名为az

"C:/Program Files (x86)/Microsoft SDKs/Azure/CLI2/python.exe" -IBm azure.cli "$@"

然后使文件可执行 chmod a+x az

内容是从 az.cmd“借来的”。

在尝试之前提到的别名方法时,我遇到了长命令的问题,很多参数抛出错误“'C:\Program' 不被识别为内部或外部命令、可运行程序或批处理文件。”

编辑:

我已经结束了通过 WLS 使用 Ubuntu。适用于所有工具,如 az、terraform、kubectl、istioctl。az 工具在交互模式下也运行良好。

于 2019-11-08T11:26:38.517 回答
2

换句话说,适用于 Windows 的 Azure CLI 与适用于 Windows 的 Git Bash 不兼容

https://github.com/Azure/azure-cli/issues/3445

于 2017-07-07T17:41:33.777 回答
1

因此,我来​​到这里寻找一种在 Azure DevOps Linux 和 Windows (git bash) 构建代理上的 bash shell 脚本中运行相同 az 命令的方法,这样我就可以在两种类型的代理之间共享相同的代码。这也适用于 Windows 10 上的 git bash shell。我更长的答案在这里:Azure DevOps Build Pipeline can't get secrets from Key Vault when protected with vnet and firewall

它的要点是:

if [[ $(uname -s) == "Linux" ]]; then
    azcmd="az"
else
    # If we're in a bash shell on Windows, az commands don't work, but we can call the az.cmd batch file directly from git Bash if we can find it...
    azcmd=$(where az.cmd)
fi

# Remember to specify CIDR /32 for removal
"$azcmd" keyvault network-rule remove -n <MyKeyVault> --ip-address 50.1.1.1/32

基本上只要在引导代码执行后替换"$azcmd"您通常使用的任何地方。az

于 2019-12-24T00:09:26.667 回答
1

我以前的方法只是将 Azure CLI Scripts 文件夹添加到$PATH我的~/.bashrc文件内部。但是,在2.2.0通过 MSI 更新 Azure CLI 后,这种方法开始失败并出现以下错误:

C:\Program: 无法打开文件 'Files': [Errno 2] 没有这样的文件或目录

所以,为了解决这个问题,我有我$PATH~/.bashrc包含~/bin,然后我创建了一个包含以下内容的文件~/bin/az(不要忘记chmod 0755新文件):

#!/usr/bin/env bash

AZURE_CLI_PATH="/c/Program Files (x86)/Microsoft SDKs/Azure/CLI2"

export PATH="${PATH}:${AZURE_CLI_PATH}:${AZURE_CLI_PATH}/Scripts"
export PYTHONPATH="${AZURE_CLI_PATH}/src"
export PYTHON_CMD="$(which python)"

winpty "${PYTHON_CMD}" -m 'azure.cli' "${@}"

关闭我的 GIT Bash 窗口并重新打开它后,我现在可以az再次运行:

$ az version
This command is in preview. It may be changed/removed in a future release.
{
  "azure-cli": "2.2.0",
  "azure-cli-command-modules-nspkg": "2.0.3",
  "azure-cli-core": "2.2.0",
  "azure-cli-nspkg": "3.0.4",
  "azure-cli-telemetry": "1.0.4",
  "extensions": {}
}
于 2020-03-19T19:34:38.447 回答
0

根本不要使用 MSI 安装程序。由于 Azure CLI 是用 Python 实现的,因此请使用 @blndev 所写的 Python 安装方法。这种方式代替az.cmd你getaz.batazshell脚本,而且安装路径不会包含空格。

pip install --user azure-cli

有关此方法的更多详细信息,请参见https://blogs.msdn.microsoft.com/brijrajsingh/2017/03/02/installing-azure-cli-2-0-on-windows/

符号链接大部分时间都对我有用,但有些命令仍然失败,例如

az dls fs access set-entry ...
'C:\Program' is not recognized as an internal or external command, operable program or batch file
于 2018-07-19T08:35:50.833 回答
-1

我尝试了@mscrivo 的解决方案。但是,在 shell 脚本中使用 az 命令时,由于路径中的空格,您仍然会遇到问题。因此,我在 %SYSTEMROOT% 中创建了一个 azproxy.cmd,其中包含

@echo off
"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" %*

然后创建指向该文件的 mklink

mklink "%SYSTEMROOT%\az" "SYSTEMROOT%\azproxy.cmd"

PS %SYSTEMROOT% 的扩展值当然不应该包含空格

于 2019-02-08T09:28:20.200 回答