2017-12-15 17 views
1

以下のコマンドは、単純なbashスクリプトで、MySQL 5.7で一時パスワードを取得するために使用されています。sedの非終動 `s 'コマンド

vzctl exec $VEID 'defaultpass=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n 's/.*[email protected]: //p')' 

私はテストのためにコマンドを実行したときしかし、それは次のように述べている:

sed: -e expression #1, char 19: unterminated `s' command 

誰かが私が間違って正確にやっているものを私に説明していただけます。私は決して専門家ではありませんが、これは正しいと思いました。私はまた "with"を置き換えようとしましたが、うまくいきませんでした。エラーはありませんでしたが、$ defaultpassは空を返します。 。。変数が空白/空であることが働いていないので、多分何か他のものはここに間違っている

+0

正確な文字の原因は不明ですが、正規表現の文字を引用しない場合は 'sed -E'を使用する必要があります – Gnudiff

+0

単一の複雑なコマンドではなく、複数のコマンドに分割してみませんか? 'cat'を使う必要はありません。' grep 'string' filename'を実行してください。 – Sundeep

答えて

4

vzctlコマンドの全三番目の引数は、単一引用符で引用されているので、あなたは二重引用符で囲むsedコマンドを配置する必要があります?。

vzctl exec $VEID 'defaultpass=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n "s/.*[email protected]: //p")' 
+0

私は間違っていました。変数defaultpassを呼び出すと、出力は空です。これは二重引用符ですでに試したことを意味しています。最初は私はそれがうまくいったと思っていましたが、私は既に変数を使用していました(それで入力を思い出しました)。 私はあなたの例を使用しています。二重引用符で、私は出力を空白/空です変数を呼び出す...? – Joanne

+1

'defaultpass = $(vzctl exec $ VEID '...')'のようなものを試してみてください。次に、現在のスコープで 'defaultpass'を設定します。 –

関連する問題