我有以下代码-
ssh host sh -s << EOF
cd /backup/
ls
psql -U user -d db << SQL
$(sed 's/${previous_quarter}/${current_quarter}/' table_quarters.sql);
$(sed 's/${previous_quarter}/${current_quarter}/' plans.sql);
SQL
EOF
这是我执行它时遵循的执行顺序 -
table_quarters
脚本计划
脚本ls
命令。
为什么不遵循这个执行顺序 -
ls
命令table_quarters
脚本计划
脚本
最佳答案
您正在将字符串发送到 ssh
的标准输入。仅当首先运行 $(...)
中的内容时才能构造此字符串,因为这些部分将被所包含命令的输出替换。
字符串展开后,它会通过 ssh 发送到远程计算机,远程计算机按顺序运行结果命令。
如果您想在远程端运行扩展,则需要正确转义美元符号。
关于bash - 嵌套的 Herodoc 操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67199110/