Как мне разобрать имя удаленного сервера внутри echo при выполнении через ssh - PullRequest
0 голосов
/ 19 ноября 2018

Я знаю, что название немного сбивает с толку, но другого пути нет.

Скрипт запускается и подключается к удаленному серверу через ssh.Это будет работать на 500 серверах, для которых я хотел бы иметь вывод, подобный этому, на консоли.

echo "проверяя $ hostname" или echo "проверяя $ {hostname} " ничего не возвращает. echo "check $ (hostname)" возвращает имя хоста локального сервера по иронии судьбы.

ssh $Server /bin/bash <<EOF
install some software
echo "checking <remote-server-name> after installation"
java -version
groovy -v
jruby -v
EOF

Мне было просто любопытно, выполнимо ли это на самом деле.Спасибо заранее.

1 Ответ

0 голосов
/ 20 ноября 2018

echo " checking $hostname" or echo " checking ${hostname}" returns nothing.

Это ожидается. В общем случае такой переменной с именем hostname нет, поэтому вы не ожидаете результата. Однако есть переменная HOSTNAME, но это только половина проблемы.

echo "check $ (hostname)" иронически возвращает имя хоста локального сервера.

Это потому, что когда вы используете документ "здесь", как в

somecommand << EOF
...
EOF

Содержимое этого документа оценивается на предмет расширения переменных до подачи ввода в вашу команду. Именно поэтому конструкция $(hostname) выполняет команду hostname в вашей локальной системе.

Вы можете запретить оценку документа здесь, заключив свой маркер конца в одинарные кавычки, например:

ssh $Server /bin/bash <<'EOF'
install some software
echo "checking $HOSTNAME after installation"
java -version
groovy -v
jruby -v
EOF
...