コンテナファイルの特定の行に変数を書き込む

コンテナファイルの特定の行に変数を書き込む

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コマンドは二重引用符「」で囲む必要があり、実際のパラメータは一重引用符「」で囲む必要があります。

すべてのパートナーに感謝します

関連情報