我想通过 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
$