У меня есть следующее в сценарии
for server in ${servers[@]}; do
echo ${server}
ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done
Но это не работает. Странная вещь, я вижу $ I количество возвращаемых строк. Итак, если у меня есть десять файлов, я вижу десять пустых строк.
--sshlogin
.Ответы:
Ваша локальная оболочка интерпретирует
${i}
внутри двойные кавычки ("
), поэтому команда работаетПросто используйте одиночные кавычки (
'
), и ваша проблема исчезнет:источник
Просто столкнулся с этой проблемой немного назад, и данное решение, хотя оно и работает, не слишком эффективно, если вы также извлекаете переменные из локальной оболочки, перед тем как ssh создаст массив для итерации. Немного сложнее было бы просто сначала избежать $, так что это будет
"for i in /tmp/foo* ; do echo \${i}; done"
Который избежал бы его в локальной конструкции, а не в вызываемой оболочке ssh.
источник
Я обновил ответ выше, чтобы получить порты из списка тоже.
источник