我在一个远程主机上的docker容器中运行Postgres。 我试图通过ssh进入该远程主机,并使用heredoc向该shell传递一个脚本。 在该脚本中,我试图对驻扎在该主机上的容器中的postgres数据库执行psql查询,并将输出分配给一个变量。 我很抱歉,我知道这有点复杂,但也许一些代码会更有条理(也不是)
如果我运行这个,我从$dbVersion的 "echo "中没有得到任何东西......事实上,由于其他一些实验,我相当确信它根本就没有到达 "echo "行,但我不知道为什么,因为......
ssh root@$serverIP13 <<EOF
postgresId=\$(docker ps | grep 'postgres_db' | awk '{print \$1}')
dbVersion=\$(docker exec -i \$postgresId psql -X -A -d myDb -U myUser -t -c "SELECT Max(Version) FROM DbVersion;")
echo \$dbVersion
...在把我的代码转来转去后...我终于找到了一个可行的方法,我得到了一个成功的版本号的 "回声"。 我对bash很陌生,所以我希望有人能为我解开这个谜团,帮助我更好地理解bash在这方面的工作原理,以及为什么下面的方法能成功,而上面的方法不能。
ssh root@$serverIP13 <<EOF
postgresId=\$(docker ps | grep 'postgres_db' | awk '{print \$1}')
dbVersion=\$(echo "psql -X -A -d myDb -U myUser -t -c 'SELECT Max(Version) FROM DbVersion;'" | docker exec -i \$postgresId bash)
echo \$dbVersion