【问题标题】:Set environment variables in shell script to run on remote server在 shell 脚本中设置环境变量以在远程服务器上运行
【发布时间】:2015-11-17 08:10:09
【问题描述】:

我有一个脚本可以在 Hive 中自动运行查询。我可以将脚本留在本地机器上,也可以放在网关机器上。如果我在远程机器上有它,我可以像运行 update_table 一样

ssh user@gatewaymachinexyz.com ‘./update_table.sh'

但是,当我这样做时,它无法识别远程计算机上设置的环境变量。如果我通过 ssh 登录到远程机器,然后运行 ​​./update_table.sh 它运行良好。从本地机器运行时,如何让它识别环境变量?

【问题讨论】:

    标签: linux bash shell ssh environment-variables


    【解决方案1】:

    也许您可以使用以下方式获取您的环境:

    ssh user@gatewaymachinexyz.com 'source /etc/bashrc && source /etc/profile && ./update_table.sh'
    

    或:

    ssh user@gatewaymachinexyz.com 'source ~/.bashrc && source ~/.bash_profile && ./update_table.sh'
    

    【讨论】:

    • 如何指定查看远程机器而不是本地机器?
    • 只需编辑您的update_table.sh 并添加source /etc/bashrc/source /etc/profile。它将source您的远程环境。
    【解决方案2】:

    从 bash_rc 中获取环境变量怎么样?

    ssh user@gatewaymachinexyz.com "source ~/.bashrc; ./update_table.sh"

    【讨论】:

    • 对不起,这会在远程机器上获取 bashrc 吗?
    【解决方案3】:

    当使用ssh 指定命令时,ssh 默认不会为会话分配伪终端 (tty)。因此,(可能)获取了一组不同的启动脚本。和/或脚本中的不同分支基于TERM 环境变量的缺失/存在。

    ssh man:

    当用户的身份被服务器接受后,服务器要么在非交互式会话中执行给定的命令,或者,如果没有指定命令,则登录到机器并提供使用普通 shell 作为交互式会话。


    要强制ssh 分配tty,请使用-t 开关:

    ssh -t user@gatewaymachinexyz.com ‘./update_table.sh'     
    

    ssh man:

    -t 强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如实现菜单服务时。多个-t 选项强制分配tty,即使ssh 没有本地tty。


    虽然不是通过强制分配伪终端来解决此问题,但您应该更好地修复您的启动脚本,为所有会话设置相同的环境。

    【讨论】:

      【解决方案4】:

      尝试使用 Jenkins 管道。它会起作用的。 例如:- sh "ssh (然后是你的 ssh 行)"

      【讨论】:

      • 在这里多做一点解释会很有帮助。目前尚不清楚 Jenkins 管道是什么。
      • 感谢您的评论。实际上,我在使用 Jenkins-AWS CLI 启动我的 AWS 基础设施并使用我的自定义脚本配置 EC2 实例时遇到了这个问题,我使用的命令为:- ssh -i mypemfile.pem -t ec2-user@IP 'ls -l && source myscript.sh && ./myscript.sh' 注意:- 在这种情况下,myscript.sh 位于 /home/ec2-user 目录。
      • 好的,你的意思是你在 Jenkins 中遇到了问题,而不是你使用 Jenkins 作为解决方案,对吧?
      猜你喜欢
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多