我想使用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")
答案 0 :(得分:5)
ssh.exec!("source /home/you/.zshrc")
puts ssh.exec!("echo $PATH")
答案 1 :(得分:0)
实际上找到了解决这个问题的方法。这是一个非常好的解决方案。感谢Vald告诉我每个执行官都独立于自己,所以你可以使用&&将命令链接在一起。
例如,我有一个可运行的ruby脚本,我正在使用zsh,所以我只是使用它:
ssh.exec("source .zshrc && ./backup.rb")
像魅力一样!当然,您也可以安全地使用完整路径或〜,但它可以完成工作。
编辑:对不起,还看到你在上面提出了一个解决方案。使用;
和&&
之间有区别吗?
答案 2 :(得分:0)