首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ssh execute设置的环境变量丢失。Ruby & net-ssh

通过ssh execute设置的环境变量丢失。Ruby & net-ssh
EN

Stack Overflow用户
提问于 2019-06-21 13:37:48
回答 2查看 237关注 0票数 1

我想在net-ssh start中设置Linux环境变量,并在我的代码中进一步使用它们。但我正在失去变量的范围。你能告诉我如何才能做到这一点吗?

我使用net-ssh并通过rsa密钥登录Linux。我已经设置了一个环境变量,我想进一步使用它,但我失去了该变量的作用域。

代码语言:javascript
复制
ssh = Net::SSH.start(host,
                     username
)
result = ssh.exec!('setenv SYBASE /opt/sybase && printenv') ### Can See environment variable SYBASE
puts result
puts "**********************************************************************************"
result = ssh.exec!('printenv')   #### Lost the environment variable SYBASE set above
puts result
puts "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-21 15:25:18

每个exec都会创建自己的环境,环境变量会丢失。与您使用&& (如果第一次成功,则执行下一个命令)或; (无论如何执行)一样,您可以链接命令。

您还可以像这样发送一个块来执行多个操作

代码语言:javascript
复制
Net::SSH.start("host", "user") do |ssh|
  ssh.exec! "cp /some/file /another/location"
  hostname = ssh.exec!("hostname")
  ssh.open_channel do |ch|
    ch.exec "sudo -p 'sudo password: ' ls" do |ch, success|
      abort "could not execute sudo ls" unless success

      ch.on_data do |ch, data|
        print data
        if data =~ /sudo password: /
          ch.send_data("password\n")
        end
      end
    end
  end

  ssh.loop
end

或者使用gem net-ssh-session

票数 1
EN

Stack Overflow用户

发布于 2019-06-25 09:22:43

@peter感谢您的建议net-ssh-session。但是,net-ssh-session需要重新编译才能与net-ssh 5.2.0版本兼容。Example here工作得很好,这正是我所需要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56697425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档