이것은 Docker 컨테이너에서 데이터베이스를 복원하기 위해 사용하고 있는(또는 사용하려고 하는) 함수입니다.
function restoredb() { # source: see above local wkdir="pwd | rev | cut -d "/" -f1 | rev" local container='echo ${wkdir}_my-wpdb_1' cat backup.sql | docker exec -i ${container} /usr/bin/mysql -u root --password=dockerpass wordpress }
docker exec
함수가 ${container}
파이프되지 않은 것처럼 동일한 방식으로 해석되기를 원합니다 .
function dumpdb() { # source https://stackoverflow.com/a/46042938/2223106 # source https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb local wkdir="pwd | rev | cut -d "/" -f1 | rev" local container='echo ${wkdir}_my-wpdb_1' docker exec ${container} mysqldump -uroot --password=password wordpress > backup.sql }
함수를 있는 그대로 실행하면 Docker는 exec
이라는 컨테이너를 찾습니다 echo
.
eval
이것이 도움이 될 것이라고 생각 tee
하지만 조금 혼란스럽습니다.
그런 다음 명령을 실행하십시오.set -x
작동하지 않는 출력 restoredb
은 다음과 같습니다.
+ restoredb + local 'wkdir=pwd | rev | cut -d / -f1 | rev' + local 'container=echo ${wkdir}_my-wpdb_1' + cat backup.sql + docker exec -i echo '${wkdir}_my-wpdb_1' /usr/bin/mysql -u root --password=dockerpass wordpress Error response from daemon: No such container: echo ++ checkdir ++ '[' -n '' ']' ++ '[' -z '' -a -d env ']'
직원용 dumpdb
:
+ docker exec renaissance_my-wpdb_1 mysqldump -uroot --password=dockerpass wordpress ++ pwd ++ checkdir ++ '[' -n '' ']' ++ '[' -z '' -a -d env ']'
그런 다음 저와 같은 무지한 사람들을 위해 set +x
장황한 출력을 제거하십시오.
답변1
작업 디렉토리를 얻기 위해 두 번 되돌리는 것은 합법적이지 않습니다. 당신은 이것을 원합니다 :
basename `pwd`
(또는 basename $PWD
원하는 경우.)
명령을 파이프에 넣는 것은 참조에 관한 모든 것처럼 보이기 때문에 이 질문과 아무 관련이 없습니다. 인용 세부정보를 실제로 살펴보고 싶다면 cat ReadMe | some_cmd | sort
와 비교할 수 있습니다 cat ReadMe | bash -c 'some_cmd' | sort
.
당신이 글을 쓸 때
local container='echo ${wkdir}_my-wpdb_1'
echo
여기서 어떤 역할을 하고 싶은지 모르겠습니다 . 작은따옴표는 $ 변수 확장을 억제합니다. 이것을 원하지 않습니까?
local container="${wkdir}_my-wpdb_1"
(작업 디렉토리에는 공백이 없으므로 따옴표를 생략할 수도 있습니다.)
또는 를 사용하여 echo $container
디버깅한 set -x
후 위와 같이 실행합니다.... | docker exec -i ${container} /usr/bin/mysql ...