bashrc의 별칭 공간

bashrc의 별칭 공간

나는 배쉬를 사용한다

한 줄에 공백으로 구분하여 도커 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\"\"}'"

이는 귀하의 상황에 적합해야 합니다.

관련 정보