我有一个脚本,将自动在Hive中运行查询。 我可以把脚本留在本地机器上,或者把它放在网关机器上。 如果我在远程机器上,我可以像运行update_table
ssh user@gatewaymachinexyz.com './update_table.sh'
但是,当我这样做时,它不能识别远程计算机上设置的环境variables。 如果我通过SSHlogin到远程机器,并运行./update_table.sh它运行良好。 如何从本地机器运行时识别环境variables?
当使用ssh
指定命令时, ssh
将不会为会话分配伪终端(tty)。 因此,一组不同的启动脚本(可能是)来源。 和/或脚本中的不同分支根据TERM
环境变量的不存在/存在而被采用。
看到ssh
人 :
当用户的身份已被服务器接受时,服务器或者在非交互式会话中执行给定的命令,或者如果没有指定命令,则登录到计算机并且给用户一个正常的shell作为交互式会话。
为了强制ssh
分配tty,使用-t
开关:
ssh -t user@gatewaymachinexyz.com './update_table.sh'
看到ssh
人 :
-t
强制伪终端分配。 这可以用来在远程机器上执行任意基于屏幕的程序,这可能是非常有用的,例如在实现菜单服务时。 多个-t
选项强制tty分配,即使ssh
没有本地tty。
尽管不是通过强制分配伪终端来解决问题,但应该更好地修复启动脚本,为所有会话设置相同的环境。
也许你可以通过使用以下代码来源
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'
那么从你的bash_rc中获取你的环境变量呢?
ssh user@gatewaymachinexyz.com "source ~/.bashrc; ./update_table.sh"