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 没有按应有的方式加载。
我还应该在 .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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你有没有尝试过类似的事情:
?
have you tried something like:
?
实际上找到了解决这个问题的方法。这是相当不错的解决方案。感谢 Vald 告诉我每个 exec 都是独立的,所以你可以只使用 &&将命令链接在一起。
例如,我有一个可运行的 ruby 脚本,并且我正在使用 zsh,所以我只使用这个:
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:
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&&
?不要使用 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.