Переменные среды не загружаются при выполнении команды через » ssh » на удаленной машине

#linux #ssh

Вопрос:

Я хочу написать сценарий, который выполняет несколько команд на удаленном сервере, включая выполнение некоторых приложений. .bashrc Файл на удаленной машине определяет PATH переменную таким образом, чтобы эти приложения находились под ней.

Но когда я попытался использовать ssh <host> <command> , кажется, что .bashrc не был загружен. ssh <host> 'echo $PATH' покажите только несколько таких путей /usr/bin .

Что смутило меня еще больше, так это то, что даже ssh <host> "source ~/.bashrc; <command>" не сработало. ssh <host> 'source ~/.bashrc; echo $PATH' все еще напечатано всего несколько патхов. Я проверил ssh <host> 'cat ~/.bashrc' и подтвердил, что этот файл действительно содержит все PATH определения, которые не были затронуты в среде, в которой выполнялась команда.

Комментарии:

1. Запуск NB ssh <host> "echo $PATH" отразит ваш путь в локальной системе, а не в удаленной системе.

Ответ №1:

Итак, после двух часов устранения неполадок я, наконец, нахожу проблему. Это происходит потому, что следующая команда в начале .bashrc .

 # If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
 

Это предотвращает выполнение чего — либо после этого в среде ssh <host> <command> .

Если у вас возникла аналогичная проблема, попробуйте проверить начало .bashrc файла.

Комментарии:

1. Это одна из причин, по которой не следует устанавливать переменные среды .bashrc . Поместите их в свою конфигурацию оболочки входа, и пусть любые другие интерактивные оболочки, не входящие в систему, наследуют переменные.

2. Вот что я сейчас делаю.