Arrays 在bash中将数组填充到ssh中

Arrays 在bash中将数组填充到ssh中,arrays,bash,ssh,Arrays,Bash,Ssh,只是一些背景资料,我有一个文件,其中有1000台服务器。我必须将它们读取到一个数组中,然后通过SSH运行大约5个命令。我一直在使用heredoc符号,但似乎失败了。目前,我收到一个错误,说主机无法识别 IFS='\n' read -d '' -r -a my_arr < file my_arr=() for i in "${my_arr[@]}"; do ssh "$1" bash -s << "EOF"

只是一些背景资料,我有一个文件,其中有1000台服务器。我必须将它们读取到一个数组中,然后通过SSH运行大约5个命令。我一直在使用heredoc符号,但似乎失败了。目前,我收到一个错误,说主机无法识别

    IFS='\n' read -d '' -r -a my_arr < file
    my_arr=()
    for i in "${my_arr[@]}"; do
            ssh "$1" bash -s << "EOF"
            echo "making back up of some file"
            cp /path/to/file /path/to/file.bak
            exit
    EOF
    done
IFS='\n'read-d'-r-a my\u arrssh“$1”bash-s您需要数组吗?问题是:

while read -r host
do
  ssh "$host" bash -s << "EOF"
  echo "making back up of some file"
  cp /path/to/file /path/to/file.bak
EOF
done < file
读取时-r主机
做

ssh“$host”bash-s您需要一个数组吗?问题是:

while read -r host
do
  ssh "$host" bash -s << "EOF"
  echo "making back up of some file"
  cp /path/to/file /path/to/file.bak
EOF
done < file
读取时-r主机
做
ssh“$host”bash-s需要澄清的是——这里的问题,也是问题中实际包含的代码中存在的唯一问题,是您在循环中使用了
$1
,而您指定
$i
作为变量,该变量包含循环每次调用时迭代的条目

也就是说:
ssh“$1”
需要用
ssh“$i”

来代替。这里的问题,也是问题中实际包含的代码中存在的唯一问题,是您在循环中使用了
$1
,而您指定
$i
作为变量,该变量包含循环每次调用时迭代的条目


也就是说:
ssh“$1”
需要通过
ssh“$i”

在循环中使用EOF来代替,从而导致文件结束。既然你可以用任何东西,我就把它改成结尾。这就解决了这个问题。@zinnadean,字符串
EOF
不会导致文件结束,除非文件本身使用相同的符号包含在一个更大的herdoc中。简而言之,只有当问题中没有包含额外的上下文时,才会导致该问题。在循环中使用EOF会导致文件结束。既然你可以用任何东西,我就把它改成结尾。这就解决了这个问题。@zinnadean,字符串
EOF
不会导致文件结束,除非文件本身使用相同的符号包含在一个更大的herdoc中。简言之,只有当问题中没有包含额外的上下文时,才会导致该问题。脚本中没有
$i
,而只是作为迭代项。您想要
$i
而不是
$1
?…很清楚,这与ssh或herdocs没有任何关系。对于“${my_arr[@]}”中的i,您会遇到与任何其他命令完全相同的问题--
;做回显“$1”;完成后
也会以同样的方式失败。顺便说一句,使用
declare-p my_arr
来清晰地打印其内容,以回答数组实际上是否正确填充的问题。另外--
EOF
只有在没有缩进的情况下才被视为heredoc的结尾。如果您的真实文件没有缩进,则在问题中只使用四个空格的缩进,而不是此处给出的八个空格的缩进。脚本中没有
$i
,除了作为迭代项。您想要
$i
而不是
$1
?…很清楚,这与ssh或herdocs没有任何关系。对于“${my_arr[@]}”中的i,您会遇到与任何其他命令完全相同的问题--
;做回显“$1”;完成后
也会以同样的方式失败。顺便说一句,使用
declare-p my_arr
来清晰地打印其内容,以回答数组实际上是否正确填充的问题。另外--
EOF
只有在没有缩进的情况下才被视为heredoc的结尾。如果您的真实文件没有缩进,那么在您的问题中只使用四个空格的缩进来准确反映这一点,而不是这里给出的八个空格的缩进。当我转录它时,这是一个错误。它应该是“$i”。那么您的原始代码本身就可以了——而您的bug只发生在您在问题中没有提供的代码的上下文中。当我转录它时,它是一个错误。它应该是“$i”。那么您的原始代码本身就很好——而您的bug只发生在您在问题中没有提供的代码的上下文中。