net-ssh и удаленная среда

Я хочу выполнить некоторую удаленную команду на своем сервере, используя библиотеку net-ssh.

У меня есть такой пример:

Net::SSH::start(host, user, options = {:keys => '~/.ssh/id_rsa'}) do |ssh|
  puts ssh.exec!("echo $PATH")
  ssh.loop
end

Результат: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games

Моя проблема в том, что мой PATH не загружен должным образом.

У меня также должны быть некоторые пути RVM и пользовательские пути, определяемые в моем .zshrc.

Как я могу изменить это поведение, чтобы позволить net-ssh использовать мой .zshrc для загрузки среды по умолчанию?

Решение:

puts ssh.exec!("source ~/.zshrc; echo $PATH")

person Arkan    schedule 28.07.2011    source источник


Ответы (3)


вы пробовали что-то вроде:

ssh.exec!("source /home/you/.zshrc")
puts ssh.exec!("echo $PATH")

?

person Vlad Khomich    schedule 28.07.2011
comment
Спасибо за ваш вклад. Каждый исполнитель! команда независимы. Это означает, что среда каждый раз сбрасывается. Я обновил свой вопрос, объясните, как я решил проблему. Но спасибо за вашу помощь :-) - person Arkan; 29.07.2011

Собственно, нашел способ обойти эту проблему. Довольно красивое решение. Спасибо Валду за то, что он сказал мне, что каждый exec не зависит от самого себя, поэтому вы можете просто использовать &&, чтобы связать команды вместе.

Например, у меня есть сценарий ruby, который можно запустить, и я использую zsh, поэтому я просто использую это:

ssh.exec("source .zshrc && ./backup.rb")

Работает как шарм! Конечно, вы также можете перестраховаться и использовать полный путь или ~, но он выполняет свою работу.

Изменить: извините, я только что видел, как вы поставили решение выше. Есть ли разница между использованием ; и &&?

person Allen    schedule 01.03.2012
comment
При использовании && второй сработает только в случае успеха первого. При использовании ; вторая команда будет срабатывать независимо от кода выхода первой. - person rohitpaulk; 27.07.2017
comment
Ага. Узнал, что в конце концов, ха-ха - person Allen; 27.07.2017

Не используйте Net / SSH для выполнения нескольких команд.

Попробуйте net-ssh-session.

Команды не являются независимыми и загружают переменные окружения вашего пользователя.

person gcstr    schedule 02.06.2013