터미널에서 다른 명령의 출력을 텍스트의 일부로 사용하여 명령을 실행하려면 어떻게 해야 합니까?

터미널에서 다른 명령의 출력을 텍스트의 일부로 사용하여 명령을 실행하려면 어떻게 해야 합니까?

만약에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')"

실제로 달성하려는 목표에 따라 시도해 볼 수 있는 여러 가지 방법이 있습니다.

  1. 명령 파이프라인의 각 부분을 교체하고 오류가 있는 위치를 확인할 수 있습니다. 내가 아는 한 지금까지 실제 디버깅을 수행한 적이 없습니다.

  2. 첫 번째 명령의 출력을 변수에 간단히 할당할 수 있습니다.

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"

분명히 두 명령의 실제 결과 집합에 액세스할 수 없기 때문에 이 중 어느 것도 디버깅할 수 없습니다. 이는 추가 디버깅을 시도할 수 있도록 하기 위한 것입니다.

어쨌든 $(…)문법은 다음과 같습니다.명령 대체, 이를 지원하는 쉘(거의 모든 최신 쉘)의 매뉴얼 페이지에 설명되어 있습니다.

관련 정보