
나는 다음 명령을 가지고 있습니다 :
docker volume ls -qf dangling=true | xargs docker volume rm
나는 이것을 얻습니다 :
"docker volume rm" requires at least 1 argument. See 'docker volume rm --help'. Usage: docker volume rm [OPTIONS] VOLUME [VOLUME...]
입력이 없기 때문이라고 가정합니다 xargs
(명령에서 반환된 일치하는 볼륨이 없기 때문입니다 docker
). 어떻게 xargs
하라고 말할 수 있나요?아무것도 아님입력이 수신되지 않을 때?
답변1
당신은 옵션을 찾고 있습니다 -r
. 이는 시스템에 구현될 수 있는 비표준 옵션입니다(설명서 확인 xargs
).
GNU xargs
매뉴얼에서:
-r
,--no-run-if-empty
표준 입력에 공백이 아닌 항목이 포함되어 있지 않으면 명령을 실행하지 마십시오. 일반적으로 명령은 입력이 없더라도 한 번만 실행됩니다. 이 옵션은 GNU 확장입니다.
OpenBSD 시스템 매뉴얼에서:
-r
인수가 없으면 명령을 실행하지 마십시오. 일반적으로 명령은 인수가 없더라도 적어도 한 번 실행됩니다.
FreeBSD 및 macOS에서는 이것이 기본 동작입니다. FreeBSD에는 -r
GNU와의 호환성 옵션이 있지만 xargs
macOS에는 없습니다.
xargs
AIX 및 Solaris에는 옵션이 없으며 -r
AIX의 기본 동작이 무엇인지 알 수 없습니다(AIX 시스템에 액세스할 수 없습니다). Solaris는 기본적으로 유틸리티를 한 번 이상 실행합니다.
-r
플래그가 없는 xargs
(그리고 Solaris에서와 같이 동쪽에서 유틸리티를 한 번 실행하는 것이 기본 동작인 경우) 시스템에서 한 가지 이식 가능한 해결 방법 은 다음을 사용하는 것입니다.
something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh
(또는 이와 유사한 것; 후행이 sh
필요하다는 점에 유의하십시오) utility
로 실행하려는 유틸리티는 어디에 있고 몇 가지 인수를 생성하는 xargs
곳은 어디입니까 ?something
짧은 쉘 스크립트는 [ "$#" -gt 0 ] && utility "$@"
인수가 주어졌는지 여부를 테스트하고, 그렇다면 해당 인수를 사용하여 유틸리티를 실행합니다.