gpt4 book ai didi

linux - bash变量似乎无法分配给在容器中执行的psql输出

转载 作者:行者123 更新时间:2023-12-02 14:13:19 26 4
gpt4 key购买 nike

我有Postgres在远程主机上的docker容器中运行。我正在尝试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
EOF
……在以这种方式扭曲我的代码之后……我终于找到了一种可行的方式,并且成功获得了版本号的“回声”。我对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
EOF

最佳答案

以下脚本有效,无需调用bash:

ssh root@$serverIP13 << 'EOF'
postgresId=$(docker ps | grep 'postgres_db' | awk '{print $1}')
dbVersion=$(docker exec $postgresId psql -X -A -d postgres -U postgres -c "select current_database()")
echo $dbVersion
EOF
我使用 'EOF'避免逃脱。
要将本地值传递给remote:
ssh root@$serverIP13 /bin/bash -s 1 2 3 << 'EOF'
echo $1 $2 $3
EOF
如果将 -i放在 docker exec中,则不应使用 $(...)

关于linux - bash变量似乎无法分配给在容器中执行的psql输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63350560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com