
31行目のDockerコンテナ内のファイルに変数を書き込む必要があります。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
Docker コンテナについては何も知りませんが、特定の行の前に変数の内容を挿入するだけであれば、次の 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コマンドは二重引用符「""」で囲み、内部引数は一重引用符「'」で囲む必要があります。
ありがとう