bash - 向 Docker 发送 2 个命令,其中 1 个是输出到另一个
问题描述
我有一个正在运行的 Azure CLI 容器。我想向容器发送 2 个命令;
- 查找带有 X 标记的资源:
az resource list --tag az=test --query "[].id" -otsv
- 删除带有 X 标记的资源:
az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
我的图像/容器中编码了环境变量,因此如果我要运行任何 Az 命令,它将针对保存在其中的服务主体运行。
如果我要登录到容器并在一行中运行命令,它将正常工作:
λ docker run -it asdf sh
/bin # az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
/bin #
但是,如果我要在容器(或映像)之外运行命令,它会希望我登录到 Az CLI:
λ docker run asdf az resource delete --ids $(az resource list --tag az=test --query "[].id" -otsv)
Please run 'az login' to setup account.
ERROR: az resource delete: error: argument --ids: expected at least one argument
usage: az resource delete [-h] [--verbose] [--debug]
[--output {json,jsonc,table,tsv}] [--query JMESPATH]
[--ids RESOURCE_IDS [RESOURCE_IDS ...]]
[--resource-group RESOURCE_GROUP_NAME]
[--namespace RESOURCE_PROVIDER_NAMESPACE]
[--parent PARENT_RESOURCE_PATH]
[--resource-type RESOURCE_TYPE]
[--name RESOURCE_NAME] [--api-version API_VERSION]
[--subscription _SUBSCRIPTION]
似乎 bash会查看$(..)
命令并没有将其发送到图像/容器。我试过用 转义字符\
,但它会带回一些我知道-otsv
确实有效的其他随机错误。
λ docker run asdf az resource delete --ids \$\(az resource list --tag az=test --query "[].id" -ots
v\)
ERROR: az resource delete: 'tsv)' is not a valid value for '--output'. See 'az resource delete --help'.
The most similar choice to 'tsv)' is:
tsv
我是 Bash 新手,我通常使用 PowerShell,但这次我们必须使用 Bash。通常在 PowerShell 中,我可以将搜索结果通过管道传输到另一个命令中以删除资源,所有这些都在一行中......但是,我不知道在这种情况下如何做到这一点。
请问有什么想法吗?
仅供参考:我将从 Azure Functions 向这个正在运行的容器发送自动命令,以执行删除所述资源的操作,因此我无法运行交互式 shell。
解决方案
错误说明了原因。如果你想在容器中执行 azure Cli,你可以使用命令连接到容器中docker exec -it containerName bash
,或者你可以做你做的。但总而言之,您应该首先登录 Azure CLI。
对于您的第二个错误,参数应该是-o tsv
.
更新 1
我测试了命令docker run imageName az resource delete
,结果给出了唯一的错误,请运行“az login”来设置帐户。
因此,无论您想使用 Azure CLI 做什么,都应该先登录。
更新 2
为此,您可以&
在两个命令行之间添加。整个命令将像这样:
docker run docker_image_name az login & az resource delete --ids $(az resource list --name resource_name --query "[].id" -o tsv)
因为两者的命令az login
会先执行,所以要先登录。不过不用担心,第二个命令也会在您登录后执行。
推荐阅读
- python - 如何使用python写出内存不足的csv?
- javascript - 成功消息在第一次提交表单后淡出,但在后续提交后不会消失
- jquery - 引导日期选择器的颜色特定日期
- python - 在 Python 中使用 selenium 进行 Webscraping - 如果 xtag 值为空,则返回 NaN
- python - 建树时如何通过引用传递?
- catboost - CV 如何确定使用哪个函数?
- database - DB2 - 在 SQL PL 中查询两个数据库
- excel - 如何将excel中的值与另一个相交值分割
- typescript - TypeORM ColumnTypeUndefined 错误排查步骤?
- amazon-web-services - Kibana on AWS 中的精细权限