もし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)
1つのコマンドだけを実行したい!
修正する:
次のように二重引用符を使用して結合すると、次のようになります。
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"
明らかに、両方のコマンドの実際の結果セットにアクセスできないため、どちらもデバッグできません。これは追加のデバッグを試みることができるようにするためです。
とにかく$(…)
文法は次のとおりです。コマンドの置き換え、これをサポートするシェル(ほぼすべての最新シェル)のマニュアルページに説明されています。