도커 컨테이너의 IP를 얻기 위해 별칭을 작성하려고 합니다. 명령은 다음과 같습니다.
docker inspect redis | grep IPAddress | awk 'NR==3{ print $2 }' | sed 's/[^"]*"\([^"]*\)".*/\1/'
명령줄에서 시작하면 제대로 작동합니다. 그런 다음 삽입합니다 bash_aliases
.
alias redis-ip="docker inspect redis | grep IPAddress | awk 'NR==3{ print $2 }' | sed 's/[^"]*"\([^"]*\)".*/\1/'"
하지만 시작할 때 redis-ip
다음 오류가 발생합니다.
sed: -e expression #1, char 19: invalid reference \1 on `s' command's RHS
누구든지 오류가 무엇인지 말해 줄 수 있습니까?
답변1
이렇게 하려면 별칭 대신 셸 함수를 사용하세요.
function redis-ip {
docker inspect redis |
grep IPAddress |
awk 'NR == 3 { print $2 }' |
sed 's/[^"]*"\([^"]*\)".*/\1/'
}
원하는 대로 작동 한다면 명령이 무엇을 출력하는지 sed
모르기 때문에 모르겠습니다 .docker
답변2
문제는 별칭이 "
큰따옴표( )로 묶여 있다는 것입니다. 이는 스크립트 $2
에서 awk
쉘이 아닌 쉘로 전달되며 awk
명령의 큰따옴표가 sed
별칭을 엉망으로 만들 것임을 의미합니다. 이렇게 하면 별칭이 예상대로 작동해야 합니다.
alias redis-ip="docker inspect redis | grep IPAddress | awk 'NR==3{print \$2 }' | sed 's/[^\"]*\"\([^\"]*\)\".*/\1/'"
아마도 더 좋고 간단 할 것입니다.기능 사용하지만.
답변3
일반적으로 "json에서 데이터를 구문 분석하거나 추출하려면 jq 또는 jsonpipe 또는 이와 유사한 것을 사용하십시오"라고 말하지만 명령에는 docker inspect
이미 출력 형식 지정 및 필드 추출이 내장되어 있습니다.
docker inspect
관심 있는 필드만 반환 하도록 지시할 수 있습니다 .
alias redis-ip="docker inspect -f '{{.NetworkSettings.IPAddress}}' redis"
또는
alias redis-ip='docker inspect -f '\''{{.NetworkSettings.IPAddress}}'\'' redis'
이것은 (간략하게)에 문서화되어 있습니다.https://docs.docker.com/engine/reference/commandline/inspect/
당신은 또한 볼 수 있습니다검사 시 확인해야 할 사항자세한 내용과 예시를 알아보세요. 그리고Docker 검사 템플릿 매직출력 형식을 검사하는 Docker의 가능성에 대한 좋은 개요와 몇 가지 유용한 예제가 포함된 또 다른 블로그 게시물입니다.