如何通过 SSH 在远程主机中执行的“for 循环”中打印索引?

如何通过 SSH 在远程主机中执行的“for 循环”中打印索引?

我想通过 ssh 进入远程主机,然后执行一个 for 循环,遍历数字序列来控制不同节点的数量。

ssh user@host /bin/bash << EOF
for i in {1..10}
do
echo $i
done
EOF

如果我这样做,输出只是 10 个空白行,而不是打印出从 1 到 10 的数字。

如果我在本地机器上执行相同的代码,我会得到所需的输出,即每行打印十行,从 1 到 10。

如何实现预期的功能,即在 SSH 中执行的 for 循环中访问索引?

答案1

来自bash 手册

此处文档
此处文档的格式为:

<<[-]word
        here-document
delimiter

[...] 如果 word 中的任何字符被引用,则分隔符是 word 上引号删除的结果,并且此处文档中的行不会扩展。如果 word 未被引用,则此处文档的所有行都将进行参数扩展、命令替换和算术扩展。

让我们尝试一下:

$ i='Howdy!'
$ ssh user@localhost /bin/bash << EOF
for i in {1..10}
do
echo $i
done
EOF
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
Howdy!
$ ssh user@localhost /bin/bash << 'EOF'
for i in {1..10}
do
echo $i
done
EOF
1
2
3
4
5
6
7
8
9
10
$

相关内容