Помогло бы, были ли Вы намного более конкретны относительно того, что Вы пытаетесь сделать.
Вот чрезвычайно упрощенный пример:
while true
do
clear
date
sleep 1
done
ssh example.com somecommand
не читает Ваш ~/.profile
; somecommand
выполняется непосредственно ssh демоном. Когда Вы не указываете команду, ssh демон вызывает Вашу оболочку входа в систему, которая читает Ваш ~/.profile
. (Замена ~/.bash_profile
, ~/.zprofile
или ~/.login
в зависимости от Вашей оболочки входа в систему.)
Существует несколько способов установить переменные среды для неинтерактивной команды, но они все требуют установки в конфигурации сервера, которая обычно является прочь по умолчанию. Принятие достаточно недавнего OpenSSH с обеих сторон:
Можно было отправить переменные среды от клиента к серверу с SendEnv
директива в ~/.ssh/config
. Определенная переменная среды должна быть включена с AcceptEnv
директива в конфигурации сервера.
Можно установить переменные среды через ~/.ssh/environment
на стороне сервера. Это должно быть включено в конфигурации сервера с PermitUserEnvironment
директива.
Принятие Вас использует основанную на ключе аутентификацию, можно также установить переменные на источник в ~/.ssh/authorized_keys
: добавить environment="FOO=bar"
в начале соответствующей строки. Снова, Вам нужно PermitUserEnvironment
директива в конфигурации сервера.
Если Вы не можете или не хотеть изменять конфигурацию сервера, необходимо будет записать полный путь в удаленную команду или явно получить Ваш .profile
в удаленной команде.
ssh user@10.0.0.5 -Y '. ~/.profile; netbeans'
ssh user@10.0.0.5 -Y '/path/to/netbeans'
От ssh (1) страница руководства (мой акцент):
Если команда указана, она выполняется на удаленном хосте вместо оболочки входа в систему.
Другими словами, это не делает "вход в систему" в удаленной системе при передаче команды ssh. Это выполняет Вашу оболочку в невходе в систему, неинтерактивном режиме, который заставляет другой набор файлов инициализации работать.
Необходимо проверить, где переменная ПУТИ устанавливается, и переместите это в соответствующий файл. Если Ваша оболочка является ударом, например, необходимо использовать .bashrc
, и нет .bash_profile
.
~/.bashrc
не правильное место для переменных среды, ~/.profile
(или ~/.bash_profile
). Никакой файл не читается здесь так или иначе. Посмотрите Различие между .bashrc и .bash_profile.
– Gilles 'SO- stop being evil'
12.11.2010, 23:08