Arrays 在bash中将数组填充到ssh中
只是一些背景资料,我有一个文件,其中有1000台服务器。我必须将它们读取到一个数组中,然后通过SSH运行大约5个命令。我一直在使用heredoc符号,但似乎失败了。目前,我收到一个错误,说主机无法识别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"
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 arr ssh“$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只发生在您在问题中没有提供的代码的上下文中。