2

Невозможно получить переменную профиля, используя ssh.

server2 ==> пользовательский apptst ==> профиль bash имеет переменную $ APPHOME.

Попытка получить значение с сервера1 с помощью SSH, но не удалось.

Используемые варианты ниже

server1> ssh apptst@server2 'echo $APPHOME'

server1> ssh apptst@server2 echo '$APPHOME'

server1> ssh apptst@server2 echo "$APPHOME"

server1> ssh apptst@server2 "echo $APPHOME"

когда пытался

server1> ssh apptst@server2 ls -ld $APPHOME

это работает отлично.

Любые предложения, что отсутствует и как я могу получить переменную с server2?

2 ответа2

4

Эта команда должна работать:

 server1> ssh apptst@server2 'bash -l -c "echo \$APPHOME"'
  • вам нужно ' , чтобы передать эту полную команду SSH в качестве одного из аргументов; это также не позволяет оболочке на сервере server1 расширять саму $APPHOME
  • bash -l запускает оболочку входа в систему, которая считывает файлы профилей, где определяется $ APPHOME (как указал @chepner в своем ответе, это не по умолчанию, когда вызывается sshd)
  • -c выполняет следующий аргумент, опять же с кавычками, что полная команда echo будет выполнена.
  • экранирование \$ необходимо, потому что в противном случае родительская (не входящая в систему) оболочка, которая вызывается sshd (и которая наследует среду непосредственно из init (*)), действительно расширяет $APPHOME . Но это слишком рано, так как $APPHOME определяется только для оболочек входа в систему (через ~/.profile). [ добавил этот пункт после комментария от ОП ]

(*) поправьте меня, если я здесь не прав.

3

Проблема в том, что когда вы указываете точную команду для запуска через ssh , удаленный sshd запускает не оболочку входа в систему для ее выполнения, а обычную неинтерактивную оболочку. В этом случае .bash_profile не выполняется, и поэтому APPHOME не определен.

И, набрав это, mph опубликовал правильное решение, чтобы заставить оболочку входа в систему, которая обрабатывает .bash_profile .

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