나는 종종 다음과 같은 진술을 실행합니다.
docker stop $(docker ps -aq); docker rm $(docker ps -aq)
이것을 입력하는 가장 짧은 방법은 무엇입니까? 나는 노력했다
docker {stop, rm} $(docker ps -aq)
그러나 이것은 두 개의 개별 진술로 확장되지 않습니다.
답변1
가장 짧은 방법은 이 두 명령을 실행하는 함수를 생성하고 이를 셸의 시작 파일에 넣은 다음 사용하는 것입니다.
예를 들어
dstoprm() {
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
}
(함수 이름을 한 글자로만 만들면 이름이 짧아집니다.)
중복을 줄이려면(보일러플레이트 비용으로) 루프를 사용할 수 있습니다.
for action in stop rm; do docker $action $(docker ps -aq); done
또는 중괄호 확장을 사용하여 여러 명령을 만들려면 다음을 수행할 수 있습니다.나는 누군가에게 이것을 사용하도록 진지하게 권장하지 않습니다:
eval 'docker '{stop,rm}' $(docker ps -aq);'
답변2
다음으로 시작하세요:
docker stop $(docker ps -aq); docker rm $(docker ps -aq)
변수를 두 번 계산하지 않기 위해 변수에 캡처하면 docker ps -aq
어떻게 될까요 ? 모든 컨테이너라는 동일한 값을 가질 것으로 예상됩니다. 이것이 변경되면 우리는 rm
우리가 호출한 것과 다른 컨테이너 세트에서 실행될 것입니다 stop
.
d=$(docker ps -aq); docker stop $d; docker rm $d
우리는 명령 순서를 단축하고 동일한 컨테이너 세트에서 실행되도록 구현했습니다.
답변3
-f
강제로 삭제하려면 매개변수를 사용하세요 .
docker rm -f $(docker ps -aq)
그러면 단일 명령으로 컨테이너가 중지되고 삭제됩니다. 추가하면 -v
컨테이너에 속한 익명 볼륨도 제거됩니다.
답변4
사용 내역 확장:
docker stop $(docker ps -aq)
!:0 rm !:2*
또는
docker stop $(docker ps -aq)
^stop^rm