Docker 컨테이너의 31번째 줄에 있는 파일에 변수를 작성해야 합니다. 나는 bash 스크립트를 사용한다
내 명령은 다음과 같습니다
txt="
log-bin
server_id=1"
docker exec $container sed -i "31i\
$txt /etc/mysql/my.cnf
다음 오류가 발생합니다.
sed: -e expression #1, char 8: extra characters after command
내 파일에 아무것도 추가되지 않았습니다...
도와주세요?
답변1
나는 도커 컨테이너에 대해 아무것도 모르지만 특정 줄 앞에 변수의 내용을 삽입하려는 경우 다음 GNU sed 명령을 사용할 수 있습니다.
VAR="$txt" sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf
안전상의 이유로 위 명령은 확장자가 .bk
.
답변2
답변해 주셔서 감사합니다. 잘 작동하지 않습니다.
실제로는 빈 줄을 삽입합니다.
내가 사용하려고 하면
VAR="$txt"
sed -i.bk '31{h;s:.*:printf "%s" "hello world":e;G}' /etc/mysql/my.cnf
효과가있다
내가 사용하려고 하면
VAR="$txt"
sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf
방금 빈 줄이 새로 생겼어요...
답변3
아 잠깐만요, 그건 단지 "그리고"의 문제일 뿐이에요
이것은 올바른 구문입니다
VAR="$txt"
docker exec $container sed -i.bk "31{h;s:.*:printf '%s' '$VAR':e;G}" $path
sed 명령은 큰따옴표 ""로 묶어야 하며, 실제 매개변수는 작은따옴표 ''로 묶어야 합니다.
모든 파트너에게 감사드립니다