通过 ssh 发送带有预扩展变量的 for 循环

通过 ssh 发送带有预扩展变量的 for 循环

因此,我正在编写一个脚本,该脚本接受一些用户和脚本生成的输入,并使用 ssh 将查询发送到远程服务器,并将输出重定向到本地服务器上的文本文件。该脚本有两个部分,一部分对本地服务器执行此操作,另一部分需要执行完全相同的操作,只是通过 ssh。我在正确格式化它时遇到了一些麻烦。我最近的尝试如下。除了 $item(它是 for 循环的一部分)之外,所有变量均由脚本定义,并且预先存在的变量需要在通过 ssh 发送之前进行扩展:

ssh root@"$3" "for item in $(cat /tmp/"$text_file");do "$psql" "$my_username" "$dbschema" -c "update "$5" set timestamp='now()' where "$4"='"$item"'";done"

为了更清楚地写出我的期望,以下是通过 ssh 在远程服务器上应该发生的事情(换句话说,如果我在另一台服务器上手动执行此操作而没有变量,这就是我会运行的操作)。

ssh username@hostname
    for item in $(cat /tmp/list.txt);do
       /usr/bin/psql kefka myschema -c "update important_table set timestamp='now()' where important_column='"$item"'"
    done

我尝试使用单个 ssh 命令执行此操作,因为网络连接不可靠,如果我循环执行数十个单独的 ssh 命令,事情就会出错。不幸的是,使用 psql 直接连接到远程数据库也不是一种选择。

我该如何格式化 ssh 命令来执行我在这里尝试执行的操作?

相关内容