为什么vagrant ssh -c忽略命令中的单引号?

时间:2017-07-13 12:37:40

标签: bash vagrant psql

我想用主机的IP更新在VW中运行的数据库列(使用Vagrant)。

为此,我想使用bash脚本:

LOCAL_IP=$(ipconfig getifaddr en0)
SQL="vagrant ssh -c 'psql -U user -d mydatabase -h localhost -c \"update mytable set mycolumn = '$LOCAL_IP';\"'"
eval $SQL

但是我收到了这个错误:

ERROR:  syntax error at or near ".123"
LINE 1: update mytable set mycolumn = 123.123.123.123;

SQL vriable的输出:

echo $SQL
vagrant ssh -c 'psql -U user -d mydatabase -h localhost -c "update mytable set mycolumn = '123.123.123.123';"'

当我从vm中的echo $SQL调用psql命令时,一切都很好,但我没有主机ip。

vagrant ssh
psql -U user -d mydatabase -h localhost -c "update mytable set mycolumn = '123.123.123.123';"

看起来vagrant ssh -c命令会删除IP周围的单引号。有什么想法吗?

更新

重现问题的最简单方法:

$ vagrant ssh -c 'echo "update table set column = 'test';" > bla.sql'
$ vagrant ssh
$ cat bla.sql
update table set column = test;

1 个答案:

答案 0 :(得分:1)

我在这里找到了解决方案: https://stackoverflow.com/a/20498919/5902456

现在看起来像这样: SQL="vagrant ssh -c 'psql -U user -d mydatabase -h localhost -c \"update mytable set mycolumn = '\''$LOCAL_IP'\'';\"'"