net-ssh 和远程环境

发布于 2024-11-26 17:31:38 字数 516 浏览 3 评论 0原文

我想使用 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 没有按应有的方式加载。

我还应该在 .zshrc 中定义一些 RVM 路径和自定义路径。

如何更改此行为以让 net-ssh 使用我的 .zshrc 加载我的默认环境?

解决方案:

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

I want to execute some remote command on my server using net-ssh library.

I have the following example:

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

The result is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

My problem is that I have not my PATH loaded as it should be.

I should also have some RVM paths, and custom paths defining into my .zshrc.

How could I change this behavior to let net-ssh to use my .zshrc to load my default environment ?

Solution:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜还是长夜 2024-12-03 17:31:38

你有没有尝试过类似的事情:

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

have you tried something like:

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

?

夏有森光若流苏 2024-12-03 17:31:38

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

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

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

Works like a charm!当然,为了安全起见,您也可以使用完整路径或 ~,但它可以完成工作。

编辑:抱歉,也刚刚看到您在上面提出了解决方案。使用 ;&& 之间有区别吗?

Found a way around this problem, actually. It's quite nice solution. Thanks to Vald for telling me that every exec is independent of itself, so then you can just use && to link the commands together.

For example, I have a ruby script that is runnable, and I'm using zsh, so I just use this:

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

Works like a charm! Of course you can also be on the safe side and use the full path or ~, but it gets the job done.

Edit: Sorry, also just saw you put a solution above. Is there a difference between using ; and &&?

心房敞 2024-12-03 17:31:38

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

尝试 net-ssh-session

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

Don't use Net/SSH for running multiple commands.

Try net-ssh-session.

Commands are not independent and it loads your user's env vars.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文