이전 명령에 하나 이상의 결과가 있는 경우에만 파이프라인에서 다음 명령을 실행하는 방법은 무엇입니까?

이전 명령에 하나 이상의 결과가 있는 경우에만 파이프라인에서 다음 명령을 실행하는 방법은 무엇입니까?

그래서 다음 명령이 있습니다.

$(docker container ls -a -q) | docker container stop

모든 도커 컨테이너를 중지하고 훌륭하게 작동했습니다! 모든 컨테이너를 지우지 않는 한:

"docker container stop" requires at least 1 argument.
See 'docker container stop --help'.

Usage:  docker container stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

한 줄 명령을 사용하여 이 오류 메시지가 표시되는 것을 방지할 수 있는 방법이 있습니까?

참고: 내 원래 명령은 실제로 docker container stop $(docker container ls -a -q)동일한 오류 메시지를 표시했지만 한 명령을 다른 명령에 파이핑/체인 연결하여 내 문제를 설명하는 것이 더 쉬울 것이라고 생각했습니다. 두 명령에 대한 답변이 모두 작동하지만 사용하는 것을 선호합니다.docker container stop $(docker container ls -a -q)

답변1

Docker의 N-ary 중지 작업은 컨테이너가 없으면 어리석기 때문에 인수를 docker stop container하나만 사용하는 단항 작업으로 처리하고 해당 단항 작업에 고유한 용어 목록을 할당할 수 있습니다. 물론 논리에서는 다음과 같이 빈 용어 시퀀스를 처리할 수 있습니다.

for x in $(docker container ls -a -q); do docker container stop $x; done

결과가 생성되지 않으면 $(docker ...)루프가 실행되지 않습니다.

답변2

리디렉션을 사용하여 셸 출력을 무음으로 설정할 수 있습니다. 자세한 내용은 이 문서를 참조하세요.https://stackoverflow.com/questions/2292847/how-to-silence-output-in-a-bash-script

아마도 응답을 처리하기 위해 이와 유사한 것을 사용하여 여전히 출력을 얻을 것입니다.

docker container stop $(docker container ls -a -q) >/dev/null 2>&1 || echo "Nothing to stop."

관련 정보