Я хочу подключиться по ssh к удаленному хосту, а затем выполнить цикл for, который проходит через последовательность чисел, чтобы контролировать количество различных узлов.

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

Если я это сделаю, то получится всего 10 пустых строк вместо распечатки чисел от 1 до 10.

Если я выполняю тот же код на своем локальном компьютере, я получаю желаемый результат, который составляет десять строк при печати каждой строки от 1 до 10.

Как достичь желаемой функциональности, то есть доступа к индексу в цикле for, который выполняется в SSH?

1 ответ1

1

Из руководства по bash:

Здесь документы
Формат здесь-документов:

<<[-]word
        here-document
delimiter

[...] Если какие-либо символы в слове заключены в кавычки, разделитель является результатом удаления кавычки в слове, а строки в документе здесь не раскрываются. Если слово не заключено в кавычки, все строки здесь-документа подвергаются расширению параметров, подстановке команд и арифметическому расширению.

Давай попробуем:

$ 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
$

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .