나는 다음 명령을 가지고 있습니다 :
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 "$@"
인수가 제공되는지 여부를 테스트하고, 제공된 경우 해당 인수를 사용하여 유틸리티를 실행합니다.