나는 배쉬를 사용한다
한 줄에 공백으로 구분하여 도커 ID만 인쇄하는 명령을 작성했습니다.
docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s ",$0} END {print ""}'
그것은 훌륭하게 작동했기 때문에 별칭으로 만들기로 결정했습니다.
우선 여기서는 공백이 "%s "
문제인 것 같아서 생략하기로 했습니다.
새 명령은 다음과 같습니다.
docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print""}'
이제 오류 없이 .bashrc를 얻었지만 별칭을 실행하려고 하면 다음 오류가 발생합니다.
{printf %s ,-bash} END {print}
^ syntax error
나는 이것을 본 적이 있다물고기: 별칭의 공백하지만 나는 생선을 사용하지 않았습니다
편집하세요. 내 별칭은 다음과 같습니다.
alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print""}'"
작은따옴표를 사용하면 source 명령이 실패합니다.
답변1
그렇기 때문에bash 매뉴얼에 따르면:
거의 모든 목적에서 셸 함수는 별칭보다 우수합니다.
dockerid() {
docker ps -a \
| grep -o -E '^[a-z0-9]{12}' \
| awk '{printf "%s ",$0} END {print ""}'
}
별칭 참조 지옥은 다음 awk
으로 대체하여 사라지 지만paste
alias dockerid="docker ps -a | grep -o -E '^[a-z0-9]{12}' | paste -d ' ' -s"
답변2
사용 외에도 다음을 docker ps -a | grep -E '^[a-z0-9]{12} -o | ...'
사용할 수도 있습니다.
docker ps -a --format '{{.ID}}' | xargs
또는 별칭을 사용하세요(저는 함수를 선호합니다)
alias dockerid='docker ps -a --format "{{.ID}}" | xargs'
답변3
문제는 인용된 문자열이 있다는 것 "
입니다 "
. 질문에서 볼 수 있듯이(구문 강조 참조) 첫 번째 내부 항목은 "
end 로 간주됩니다 "
. 따라서 \
다음과 같이 내부 따옴표를 이스케이프하고 내부 따옴표도 이스케이프해야 합니다 .
alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf \"%s\\ \",$0} END {print \"\"}'"
답변4
문제는 별칭을 호출할 때 실행하려는 전체 명령을 묶기 위해 작은따옴표(')를 사용하고 있지만 명령 자체에도 작은따옴표를 사용하고 있다는 것입니다. 이로 인해 쉘은 명령의 작은따옴표를 실행해야 하는 명령의 일부가 아닌 별칭 정의의 일부로 해석합니다.
이 문제를 해결하려면 전체 명령을 작은따옴표 대신 큰따옴표(")로 묶을 수 있습니다. 이렇게 하면 쉘이 명령에 있는 작은따옴표를 별칭 정의의 일부가 아닌 명령 자체의 일부로 해석할 수 있습니다.
alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print\"\"}'"
이는 귀하의 상황에 적합해야 합니다.