没有终结的's' sed中的命令

时间:2017-12-15 13:47:48

标签: bash shell quoting

以下命令用于简单的 bash脚本,以获取MySQL 5.7中的临时密码。

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

然而,当我运行测试命令时,它会显示以下内容:

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

有人可以解释一下我到底做错了什么。我绝不是专家,但我认为这是正确的。我也试过更换'用",但那不起作用。然后没有错误,但是$ defaultpass返回为空。

跟进:遗憾的是,当我使用双引号时,如pii_ke所述,变量的输出为空/空白。所以这不起作用。也许这里有别的错了?

1 个答案:

答案 0 :(得分:4)

由于vzctl命令的整个第三个参数引用了单引号。您应该将sed命令放在双引号内:

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