如果command1
是:
curl -k -v -u user:password https://example.com/v2/image/manifests/tag -H Accept: application/vnd.docker.distribution.manifest.v2+json 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'
例如,其输出如下Docker-Content-Digest
:
> sha256:12345...
知道单独运行每个命令是有效的,如何注入command1
输出作为command2
文本为:
curl -k -v -u user:password -X DELETE https://example.com/v2/image/manifests/(command1 output)
我只是想只运行一个命令!
更新:
当我使用双引号将它们组合在一起时,如下所示:
curl -k -v -u user:password -X DELETE https://example.com/v2/image/manifests/"$(curl -k -v -u user:password https://example.com/v2/image/manifests/tag -H Accept: application/vnd.docker.distribution.manifest.v2+json 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}')"
我得到以下输出command2
从未执行:
> * Illegal characters found in URL
> * Closing connection -1
> * curl: (3) Illegal characters found in URL
更新2
当我使用单引号时,我得到以下输出:
> < HTTP/1.1 404 Not Found
< Server: nginx/1.21.3
< Date: Tue, 28 Sep
> 2021 13:46:50 GMT
< Content-Type: text/plain; charset=utf-8 <
> Content-Length: 19
< Connection: keep-alive <
> Docker-Distribution-Api-Version: registry/2.0 <
> X-Content-Type-Options: nosniff < 404 page not found
答案1
我假设你的意思是:
echo "thisis $(echo 'test')"
根据您实际想要实现的目标,您可以尝试很多事情:
您可以替换命令管道的每个部分并查看错误在哪里。到目前为止,据我所知,您还没有进行任何实际的调试。
您可以简单地将第一个命令的输出分配给一个变量:
CMD1=$(curl -k -v -u user:password https://example.com/v2/image/manifests/tag -H Accept: application/vnd.docker.distribution.manifest.v2+json 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}')
curl -k -v -u user:password -X DELETE https://example.com/v2/image/manifests/"$CMD1"
显然我无法调试其中任何一个,因为我无权访问任一命令的实际结果集 - 这是为了让您尝试进一步调试。
在任何情况下,$(…)
语法称为命令替换,并且在支持它的 shell 的手册页中对此进行了解释(几乎是每一个现代的 shell)。