만약에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"
분명히 두 명령의 실제 결과 집합에 액세스할 수 없기 때문에 이 중 어느 것도 디버깅할 수 없습니다. 이는 추가 디버깅을 시도할 수 있도록 하기 위한 것입니다.
어쨌든 $(…)
문법은 다음과 같습니다.명령 대체, 이를 지원하는 쉘(거의 모든 최신 쉘)의 매뉴얼 페이지에 설명되어 있습니다.