아주 작은 차이가 있는 두 명령문을 실행합니다.

아주 작은 차이가 있는 두 명령문을 실행합니다.

나는 종종 다음과 같은 진술을 실행합니다.

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

관련 정보