我有一个脚本会自动在Hive中运行查询。我可以将脚本保留在本地计算机上,也可以将其放在网关机器上。如果我在远程计算机上有它,我可以运行update_table,如
ssh user@gatewaymachinexyz.com ‘./update_table.sh'
但是,当我这样做时,它不会识别远程计算机上设置的环境变量。如果我通过ssh登录到远程计算机,然后运行./update_table.sh就运行正常。从本地计算机运行时如何识别环境变量?
答案 0 :(得分:1)
当使用ssh
指定命令时,ssh
默认情况下不会为会话分配伪终端(tty)。因此,可能(可能)采购了一组不同的启动脚本。根据{{1}}环境变量的存在/存在,和/或脚本中的不同分支。
请参阅ssh
man:
当服务器接受用户的身份时,服务器在非交互式会话中执行给定的命令,或者,如果没有指定命令,则登录到机器并给出使用普通shell作为交互式会话。
要强制TERM
分配tty,请使用ssh
开关:
-t
请参阅ssh
man:
ssh -t user@gatewaymachinexyz.com ‘./update_table.sh'
强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如,实现菜单服务时。即使-t
没有本地tty,多个-t
选项也会强制进行tty分配。
虽然不是通过强制分配伪终端来解决问题,但您应该更好地修复启动脚本,为所有会话设置相同的环境。
答案 1 :(得分:0)
也许您可以使用以下方式获取您的环境:
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'
答案 2 :(得分:0)
如何从bash_rc中获取环境变量?
ssh user@gatewaymachinexyz.com "source ~/.bashrc; ./update_table.sh"
答案 3 :(得分:-1)
尝试使用Jenkins管道。会的。 例如:-sh“ ssh(然后是您的ssh行)”