BASH: s sh результат доступа к переменной на удаленном хосте - PullRequest
0 голосов
/ 14 марта 2020

Как сделать переменную доступной на удаленном компьютере через s sh?

У меня есть массив bash, содержащий n IP-адреса для этого конкретного экземпляра c. Я хочу отправить «результат» первого элемента в массиве на удаленную машину для дальнейшее использование.

#!/bin/bash
servers=(192.168.130.252 10.10.10.10 12.12.12.12)


echo "Before ssh: ${servers[0]}"
ssh ubuntu@"${servers[0]}" /bin/bash<<"EOF"
    echo "$(hostname -I | awk '{print $1}')"
    echo "After ssh: ${servers[0]}"
    # MORE COMMAND HERE
EOF
exit 0

#Output
Before ssh: 192.168.130.252
192.168.130.252
After ssh:  

1 Ответ

2 голосов
/ 14 марта 2020

Поскольку вы использовали кавычки в "EOF", $ {servers [0]} раскрывается в удаленной оболочке, поэтому пустая строка в массиве servers не определена. Один из способов:

#!/bin/bash
servers=(192.168.130.252 10.10.10.10 12.12.12.12)

echo "Before ssh: ${servers[0]}"
ssh ubuntu@"${servers[0]}" CURRENT_HOST="${servers[0]}" /bin/bash<<"EOF"
    echo "$(hostname -I | awk '{print $1}')"
    echo "After ssh: $CURRENT_HOST"
    # MORE COMMAND HERE
EOF
exit 0

Только что нашел способ отправить весь массив в удаленную оболочку:

#!/bin/bash
servers=(192.168.130.252 10.10.10.10 12.12.12.12)

echo "Before ssh: ${servers[0]}"
{ declare -p servers
  cat << "EOF"
    echo "$(hostname -I | awk '{print $1}')"
    echo "After ssh: ${servers[0]}"
    # MORE COMMAND HERE
EOF
} | ssh ubuntu@"${servers[0]}" /bin/bash
...