4

我想使用 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")
4

3 回答 3

6

你有没有尝试过类似的东西:

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

?

于 2011-07-28T06:05:14.687 回答
1

实际上找到了解决这个问题的方法。这是一个很好的解决方案。感谢 Vald 告诉我每个 exec 都是独立的,所以你可以使用 && 将命令链接在一起。

例如,我有一个可运行的 ruby​​ 脚本,并且我正在使用 zsh,所以我只使用它:

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

奇迹般有效!当然,您也可以安全起见并使用完整路径或〜,但它可以完成工作。

编辑:对不起,也刚刚看到你在上面提出了一个解决方案。;使用和有区别&&吗?

于 2012-03-01T03:55:41.080 回答
1

不要使用 Net/SSH 运行多个命令。

尝试net-ssh-session

命令不是独立的,它会加载用户的环境变量。

于 2013-06-02T23:32:39.710 回答